Pythonパンダで時間ベースのイベントを時間テンプレートに分割する方法はありますか?

Suhas Mucherla

開始時刻と終了時刻のさまざまなイベントを含むデータフレームがあります。例えば、ここに画像の説明を入力してください

時間テンプレート(列の時間)であり、同じイベントの異なる行の日付である出力データフレームが必要です。そして、その対応する時間と日付に「1」として入力される値。

ここに画像の説明を入力してください

どんな助けでもいただければ幸いです。

ジェズリール

次を使用できます。

df = pd.DataFrame({
        'Event':list('abc'),
        'StartTime':['24-12-19 1:14','22-12-19 0:32','23-12-19 6:00'],
        'EndTime':['24-12-19 6:00','24-12-19 4:32','24-12-19 16:00']
})

df[['StartTime','EndTime']] = df[['StartTime','EndTime']].apply(pd.to_datetime, dayfirst=True)

df1 = (df.melt('Event')
         .set_index('value')
         .groupby('Event')['Event']
         .resample('H')
         .count()
         .reset_index(name='val')
         .assign(val=1, 
                 date=lambda x: x['value'].dt.date, 
                 hour=lambda x: x['value'].dt.hour)
         .set_index(['Event','date','hour'])['val']
         .unstack(fill_value=0)
         .reset_index()
         .rename_axis(None, axis=1)
        )

print (df1)

  Event       date  0  1  2  3  4  5  6  7  ...  14  15  16  17  18  19  20  \
0     a 2019-12-24  0  1  1  1  1  1  1  0  ...   0   0   0   0   0   0   0   
1     b 2019-12-22  1  1  1  1  1  1  1  1  ...   1   1   1   1   1   1   1   
2     b 2019-12-23  1  1  1  1  1  1  1  1  ...   1   1   1   1   1   1   1   
3     b 2019-12-24  1  1  1  1  1  0  0  0  ...   0   0   0   0   0   0   0   
4     c 2019-12-23  0  0  0  0  0  0  1  1  ...   1   1   1   1   1   1   1   
5     c 2019-12-24  1  1  1  1  1  1  1  1  ...   1   1   1   0   0   0   0   

   21  22  23  
0   0   0   0  
1   1   1   1  
2   1   1   1  
3   0   0   0  
4   1   1   1  
5   0   0   0  

[6 rows x 26 columns]

説明

  1. まず、DataFrame.applyによって両方の列を日時に変換しますto_datetime
  2. 形を変えるDataFrame.melt-DataFrameGroupBy.resampleグループごとに可能
  3. で新しい列を作成してDataFrame.assignのすべての値を設定するためval1、によって日付Series.dt.dateSeries.dt.hour
  4. 最終リシェイプDataFrame.set_indexSeries.unstack
  5. クリーニングラストはいくつかのデータDataFrame.reset_indexDataFrame.rename_axis

編集:

時間の開始と終了については、同様のソリューションを使用します。時間については、フロア時間をSeries.dt.floor減算し1開始日も減算する場合は、次のように使用firstresampleます。

#changed times
df = pd.DataFrame({
        'Event':list('abc'),
        'StartTime':['24-12-19 1:20','22-12-19 0:30','23-12-19 6:00'],
        'EndTime':['24-12-19 6:20','24-12-19 4:40','24-12-19 16:00']
})

df[['StartTime','EndTime']] = df[['StartTime','EndTime']].apply(pd.to_datetime, dayfirst=True)

f = lambda x: x['value'].sub(x['value'].dt.floor('H')).dt.total_seconds().div(3600)
df1 = (df.melt('Event')
         .assign(h = f)
         .assign(h = lambda x: x.h.mask(x.variable == 'StartTime', 1 - x.h))
         .set_index('value')
         .groupby('Event')['h']
         .resample('H')
         .first()
         .fillna(1)
         .reset_index(name='h')
         .assign(date=lambda x: x['value'].dt.date, 
                 hour=lambda x: x['value'].dt.hour)
         .set_index(['Event','date','hour'])['h']
         .unstack(fill_value=0)
         .reset_index()
         .rename_axis(None, axis=1)
        )

print (df1)
  Event       date    0         1    2    3         4    5         6    7  \
0     a 2019-12-24  0.0  0.666667  1.0  1.0  1.000000  1.0  0.333333  0.0   
1     b 2019-12-22  0.5  1.000000  1.0  1.0  1.000000  1.0  1.000000  1.0   
2     b 2019-12-23  1.0  1.000000  1.0  1.0  1.000000  1.0  1.000000  1.0   
3     b 2019-12-24  1.0  1.000000  1.0  1.0  0.666667  0.0  0.000000  0.0   
4     c 2019-12-23  0.0  0.000000  0.0  0.0  0.000000  0.0  1.000000  1.0   
5     c 2019-12-24  1.0  1.000000  1.0  1.0  1.000000  1.0  1.000000  1.0   

  14   15   16   17   18   19   20   21   22   23  
0  ...  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  
1  ...  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  
2  ...  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  
3  ...  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  
4  ...  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  
5  ...  1.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  

[6 rows x 26 columns]

編集1:アイデアは分単位でリサンプリングしてから時間を集計します:

df = pd.DataFrame({
        'Event':list('abc'),
        'StartTime':['20-12-19 18:06','22-12-19 0:32','23-12-19 6:00'],
        'EndTime':['20-12-19 18:07','24-12-19 4:32','24-12-19 16:00']
})

df[['StartTime','EndTime']] = df[['StartTime','EndTime']].apply(pd.to_datetime, dayfirst=True)

f = lambda x: x['value'].sub(x['value'].dt.floor('Min')).dt.total_seconds().div(60)
df1 = (df.melt('Event')
         .assign(h = f)
         .assign(h = lambda x: x.h.mask(x.variable == 'StartTime', 1 - x.h))
         .set_index('value')
         .groupby('Event')['h']
         .resample('Min')
         .first()
         .fillna(1)
         .reset_index(name='h')
         .assign(date=lambda x: x['value'].dt.date, 
                 hour=lambda x: x['value'].dt.hour)
         .groupby(['Event','date','hour'])['h']
         .sum()
         .unstack(fill_value=0)
         .div(60)
          .reset_index()
          .rename_axis(None, axis=1)
        )

print (df1)
  Event        date         0    1    2    3         4    5    6    7    8  \
0     a  2019-12-20  0.000000  0.0  0.0  0.0  0.000000  0.0  0.0  0.0  0.0   
1     b  2019-12-22  0.466667  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
2     b  2019-12-23  1.000000  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
3     b  2019-12-24  1.000000  1.0  1.0  1.0  0.533333  0.0  0.0  0.0  0.0   
4     c  2019-12-23  0.000000  0.0  0.0  0.0  0.000000  0.0  1.0  1.0  1.0   
5     c  2019-12-24  1.000000  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   

     9   10   11   12   13   14   15   16   17        18   19   20   21   22  \
0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.016667  0.0  0.0  0.0  0.0   
1  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
2  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
3  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.000000  0.0  0.0  0.0  0.0   
4  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
5  1.0  1.0  1.0  1.0  1.0  1.0  1.0  0.0  0.0  0.000000  0.0  0.0  0.0  0.0   

    23  
0  0.0  
1  1.0  
2  1.0  
3  0.0  
4  1.0  
5  0.0  

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

24時間以上時間でパンダの時間データを表示する方法はありますか?

分類Dev

ubuntuでアプリを同時にインストールする時間はありますか?

分類Dev

Vueは、このHTMLテンプレートを開発モードでコンパイルするのに非常に時間がかかります

分類Dev

コンパイル時にすべてのc ++テンプレートサイズをインスタンス化する方法はありますか?

分類Dev

たとえば、過去24時間に信号にイベントがない場合に、エラーイベントを生成する方法はありますか?

分類Dev

イベント時間プラス4時間がjsの現在の時間よりも長い場合は、リダイレクトを実行します

分類Dev

PySparkでのGBT分類器の相互検証には、2 GBのデータで時間がかかりすぎます(80%のトレーニングと20%のテスト)。時間を短縮する方法はありますか?

分類Dev

パンダの時間/平日のプロットに2レベルの目盛りを設定するにはどうすればよいですか?

分類Dev

タイミングテンプレートを-T1に設定したnmapsynスキャンにはどのくらい時間がかかりますか?速度を向上させる方法はありますか?

分類Dev

bashrc / zshrcをベンチマークし、レンダリング時間をプロンプトする方法は?

分類Dev

Pythonで、ある時間を別の時間のパーセンテージとして計算する方法はありますか?

分類Dev

配列/ベクトルで2番目に大きい数を選択するための時間計算量O(n * Log(n))のインプレースアルゴリズムはありますか?

分類Dev

変更イベントまたは即時値変更イベントでペーパースライダーの即時値/現在値を取得する方法

分類Dev

HiveSQLで時間関連のイベントをグループ化する方法

分類Dev

最後に一致したイベントの取り込み時間とCEPの一致してパターンを起動する時間の間の時間が非常に長いのはなぜですか?

分類Dev

データベースのインポートには時間がかかります

分類Dev

イベントレコードで時間の冗長性を探すことを繰り返す方法は?

分類Dev

djangoのすべてのテンプレートにデフォルトのベーステンプレートを指定する方法はありますか?

分類Dev

WCFサービスとWCFクライアント間のイベントをシミュレートする簡単な方法はありますか?

分類Dev

テストおよびトレーニングデータセットで時間ベースの分割を使用してデータを分割する

分類Dev

Windows XP:システムイベントログに起動時間とシャットダウン時間を記録することは可能ですか?

分類Dev

時間ベースでSpringキャッシュからのエントリを無効にする方法は?

分類Dev

AzureComputeはイベントをAzureEventGridにプッシュするのに時間がかかりますか?イベントをより早く取得する方法はありますか?

分類Dev

インポートなしで時間をカウントする方法はありますか?

分類Dev

時間でインデックスを作成すると、パンダのデータフレームがトレーニングセットとテストセットに分割されます

分類Dev

cmdでイベントの時間を出力する方法は?

分類Dev

Pythonで2データ時間の間の日時範囲をリストする方法はありますか?

分類Dev

GoogleスプレッドシートからGoogleカレンダーイベントを作成するGoogleScript-「最大実行時間を超えました」

分類Dev

Kinesis消防ホースS3レコードをイベント時間ごとに分割する

Related 関連記事

  1. 1

    24時間以上時間でパンダの時間データを表示する方法はありますか?

  2. 2

    ubuntuでアプリを同時にインストールする時間はありますか?

  3. 3

    Vueは、このHTMLテンプレートを開発モードでコンパイルするのに非常に時間がかかります

  4. 4

    コンパイル時にすべてのc ++テンプレートサイズをインスタンス化する方法はありますか?

  5. 5

    たとえば、過去24時間に信号にイベントがない場合に、エラーイベントを生成する方法はありますか?

  6. 6

    イベント時間プラス4時間がjsの現在の時間よりも長い場合は、リダイレクトを実行します

  7. 7

    PySparkでのGBT分類器の相互検証には、2 GBのデータで時間がかかりすぎます(80%のトレーニングと20%のテスト)。時間を短縮する方法はありますか?

  8. 8

    パンダの時間/平日のプロットに2レベルの目盛りを設定するにはどうすればよいですか?

  9. 9

    タイミングテンプレートを-T1に設定したnmapsynスキャンにはどのくらい時間がかかりますか?速度を向上させる方法はありますか?

  10. 10

    bashrc / zshrcをベンチマークし、レンダリング時間をプロンプトする方法は?

  11. 11

    Pythonで、ある時間を別の時間のパーセンテージとして計算する方法はありますか?

  12. 12

    配列/ベクトルで2番目に大きい数を選択するための時間計算量O(n * Log(n))のインプレースアルゴリズムはありますか?

  13. 13

    変更イベントまたは即時値変更イベントでペーパースライダーの即時値/現在値を取得する方法

  14. 14

    HiveSQLで時間関連のイベントをグループ化する方法

  15. 15

    最後に一致したイベントの取り込み時間とCEPの一致してパターンを起動する時間の間の時間が非常に長いのはなぜですか?

  16. 16

    データベースのインポートには時間がかかります

  17. 17

    イベントレコードで時間の冗長性を探すことを繰り返す方法は?

  18. 18

    djangoのすべてのテンプレートにデフォルトのベーステンプレートを指定する方法はありますか?

  19. 19

    WCFサービスとWCFクライアント間のイベントをシミュレートする簡単な方法はありますか?

  20. 20

    テストおよびトレーニングデータセットで時間ベースの分割を使用してデータを分割する

  21. 21

    Windows XP:システムイベントログに起動時間とシャットダウン時間を記録することは可能ですか?

  22. 22

    時間ベースでSpringキャッシュからのエントリを無効にする方法は?

  23. 23

    AzureComputeはイベントをAzureEventGridにプッシュするのに時間がかかりますか?イベントをより早く取得する方法はありますか?

  24. 24

    インポートなしで時間をカウントする方法はありますか?

  25. 25

    時間でインデックスを作成すると、パンダのデータフレームがトレーニングセットとテストセットに分割されます

  26. 26

    cmdでイベントの時間を出力する方法は?

  27. 27

    Pythonで2データ時間の間の日時範囲をリストする方法はありますか?

  28. 28

    GoogleスプレッドシートからGoogleカレンダーイベントを作成するGoogleScript-「最大実行時間を超えました」

  29. 29

    Kinesis消防ホースS3レコードをイベント時間ごとに分割する

ホットタグ

アーカイブ