パンダ:あるデータフレームから別のデータフレームに日時のタイムラインを課す

アキレス・パエス

私はこれらの2つのデータフレームを持っています:

main_df:

    value    feed_id                created_at  
0     0.0  1010077.0 2019-03-06 07:38:18-05:00   
1     1.0  1010077.0 2019-03-06 07:39:26-05:00   
2     1.0  1010077.0 2019-03-06 07:40:33-05:00   
3     1.0  1010077.0 2019-03-06 07:41:41-05:00   
4     1.0  1010077.0 2019-03-06 07:42:49-05:00   
5     1.0  1010077.0 2019-03-06 07:43:56-05:00   

aux_df:

       value    feed_id                created_at
0  20.298492  1009408.0 2019-03-06 07:35:33-05:00
1  20.315002  1009408.0 2019-03-06 07:36:34-05:00
2  20.315002  1009408.0 2019-03-06 07:37:36-05:00
3  20.359650  1009408.0 2019-03-06 07:38:36-05:00
4  20.359650  1009408.0 2019-03-06 07:39:37-05:00
5  20.383179  1009408.0 2019-03-06 07:40:38-05:00
6  20.383179  1009408.0 2019-03-06 07:41:38-05:00
7  20.449524  1009408.0 2019-03-06 07:42:39-05:00
8  20.449524  1009408.0 2019-03-06 07:43:40-05:00
9  20.521912  1009408.0 2019-03-06 07:44:41-05:00

この条件で次の(final_df)が必要です。aux_dfの「created_at」列に記述されている「タイムライン」を、両方の列に共通または非共通の値があるかどうかに関係なく、main_dfに完全にマージします。一般的なものについては、タイムスタンプ全体を取得し、秒単位の部分を無視します(すべての値が同じ日付、時間、分で整列されているが、秒ではないことに注意してください)。

       value    feed_id                created_at
0        nan        nan 2019-03-06 07:35:33-05:00
1        nan        nan 2019-03-06 07:36:34-05:00
2        nan        nan 2019-03-06 07:37:36-05:00
3        0.0  1010077.0 2019-03-06 07:38:36-05:00
4        1.0  1010077.0 2019-03-06 07:39:37-05:00
5        1.0  1010077.0 2019-03-06 07:40:38-05:00
6        1.0  1010077.0 2019-03-06 07:41:38-05:00
7        1.0  1010077.0 2019-03-06 07:42:39-05:00
8        1.0  1010077.0 2019-03-06 07:43:40-05:00
9        nan        nan 2019-03-06 07:44:41-05:00

私が試したが成功しなかった戦略:

  1. 各タイムスタンプの分単位で「round」を使用して、「created_at_2」という名前の両方のデータフレームに新しい列を作成します。これにより、マージを行う前に、タイムスタンプの秒の部分を破棄できます。
  2. マージを使用します。

    main_df ['created_at_2'] = main_df.created_at.dt.round( 'min')aux_df ['created_at_2'] = aux_df.created_at.dt.round( 'min')final_df = pd.merge(main_df、aux_df、on = ['created_at_2']、how = 'inner')

ただし、この例に示すように、この方法は堅牢ではありません。2019-03-06 07:40:33-05:00のようなタイムスタンプを丸めると、40分ではなく41分になります。また、分単位の連続した列が必要です。

これを使用して、タイムスタンプのタイムラインを再フォーマットすることができます。

main_df.created_at.map(lambda t: t.strftime('%Y-%m-%d %H:%M'))
aux_df.created_at.map(lambda t: t.strftime('%Y-%m-%d %H:%M'))
final_df = pd.merge(main_df, aux_df, on=['created_at_2'], how='inner')

ただし、このメソッドが堅牢であるかどうかはわかりません。それでも、「created_at」列から一般的ではない値にインデックスを付ける必要があります。それで、これを達成するためのより適切な方法はありますか?

前もって感謝します!

ジェズリール

1つのアイデアは使用merge_asofですが、最後の行は異なります。

main_df['created_at'] = pd.to_datetime(main_df['created_at'])
aux_df['created_at'] = pd.to_datetime(aux_df['created_at'])

df = pd.merge_asof(aux_df[['created_at']], main_df, on=['created_at'])
print (df)
                 created_at  value    feed_id
0 2019-03-06 07:35:33-05:00    NaN        NaN
1 2019-03-06 07:36:34-05:00    NaN        NaN
2 2019-03-06 07:37:36-05:00    NaN        NaN
3 2019-03-06 07:38:36-05:00    0.0  1010077.0
4 2019-03-06 07:39:37-05:00    1.0  1010077.0
5 2019-03-06 07:40:38-05:00    1.0  1010077.0
6 2019-03-06 07:41:38-05:00    1.0  1010077.0
7 2019-03-06 07:42:39-05:00    1.0  1010077.0
8 2019-03-06 07:43:40-05:00    1.0  1010077.0
9 2019-03-06 07:44:41-05:00    1.0  1010077.0

もう1つはSeries.dt.floor代わりに使用することroundです:

main_df['created_at'] = pd.to_datetime(main_df['created_at'])
aux_df['created_at'] = pd.to_datetime(aux_df['created_at'])
main_df['created_at_2'] = main_df.created_at.dt.floor('min') 
aux_df['created_at_2'] = aux_df.created_at.dt.floor('min') 

df = pd.merge(aux_df[['created_at_2']], main_df, on=['created_at_2'], how='left')
print (df)
               created_at_2  value    feed_id                created_at
0 2019-03-06 07:35:00-05:00    NaN        NaN                       NaT
1 2019-03-06 07:36:00-05:00    NaN        NaN                       NaT
2 2019-03-06 07:37:00-05:00    NaN        NaN                       NaT
3 2019-03-06 07:38:00-05:00    0.0  1010077.0 2019-03-06 07:38:18-05:00
4 2019-03-06 07:39:00-05:00    1.0  1010077.0 2019-03-06 07:39:26-05:00
5 2019-03-06 07:40:00-05:00    1.0  1010077.0 2019-03-06 07:40:33-05:00
6 2019-03-06 07:41:00-05:00    1.0  1010077.0 2019-03-06 07:41:41-05:00
7 2019-03-06 07:42:00-05:00    1.0  1010077.0 2019-03-06 07:42:49-05:00
8 2019-03-06 07:43:00-05:00    1.0  1010077.0 2019-03-06 07:43:56-05:00
9 2019-03-06 07:44:00-05:00    NaN        NaN                       NaT

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

パンダデータフレームの日時からタイムスタンプを削除する

分類Dev

別のデータフレームからパンダのデータフレームに行を追加する

分類Dev

別のデータフレームからパンダのデータフレームに行を追加する

分類Dev

R:日付を照合して、あるデータフレームから別のデータフレームに値をインポートします

分類Dev

別のデータフレームからパンダのデータフレームを抽出する

分類Dev

あるデータフレームの月次データを別のデータフレームの日次データとマージするパンダ

分類Dev

パンダのあるデータフレームから別のデータフレームへのインデックス値のマッピング

分類Dev

あるパンダのデータフレームから別のパンダのデータフレームから列を減算します

分類Dev

Pandasデータフレーム-個別の列から日時インデックスを作成する

分類Dev

パンダ:.locは、あるデータフレームの行を別のデータフレームのスライスの行に割り当てません

分類Dev

あるパンダのデータフレームから別のデータフレームにデータを置き換える

分類Dev

あるデータフレームから列名を取得し、パンダの別のデータフレームに空の列として追加します

分類Dev

日時を含むグループ化されたパンダデータフレームを単一のタイムラインにプロットする

分類Dev

パンダのデータフレームを別のスタイルのパンダのデータフレームに変換する

分類Dev

パンダは列名をあるデータフレームから別のデータフレームにコピーします

分類Dev

あるデータフレームから別のデータフレームパンダにリストを展開する

分類Dev

Python:あるデータフレームから別のデータフレームに特定のインデックスで行を挿入する

分類Dev

R - あるデータフレームから要素のインデックスを検索し、別のデータフレームに配置する

分類Dev

パンダ-あるデータフレームから別のデータフレームに値をマップします

分類Dev

パンダ-あるデータフレームから別のデータフレームに値をマップします

分類Dev

日時列に基づいてパンダのデータフレームをスライスします

分類Dev

パンダデータフレームのタイムスタンプから月を抽出する方法は?

分類Dev

別のデータフレームからの日付のパンダデータフレームをフィルタリングします

分類Dev

1つのパンダデータフレームを別のデータフレームにマージし、最初のデータフレームに存在する値を2番目のデータフレームから削除します

分類Dev

パンダのデータフレームを別のデータフレーム内に保存する

分類Dev

パンダ-日時データフレームの毎日から最初と最後の値を取得する

分類Dev

あるデータフレームを別のデータフレームにスライスする

分類Dev

条件付きで別のデータフレームにデータフレームを追加するパンダ

分類Dev

別のデータフレームに基づいてパンダデータフレームを生成する

Related 関連記事

  1. 1

    パンダデータフレームの日時からタイムスタンプを削除する

  2. 2

    別のデータフレームからパンダのデータフレームに行を追加する

  3. 3

    別のデータフレームからパンダのデータフレームに行を追加する

  4. 4

    R:日付を照合して、あるデータフレームから別のデータフレームに値をインポートします

  5. 5

    別のデータフレームからパンダのデータフレームを抽出する

  6. 6

    あるデータフレームの月次データを別のデータフレームの日次データとマージするパンダ

  7. 7

    パンダのあるデータフレームから別のデータフレームへのインデックス値のマッピング

  8. 8

    あるパンダのデータフレームから別のパンダのデータフレームから列を減算します

  9. 9

    Pandasデータフレーム-個別の列から日時インデックスを作成する

  10. 10

    パンダ:.locは、あるデータフレームの行を別のデータフレームのスライスの行に割り当てません

  11. 11

    あるパンダのデータフレームから別のデータフレームにデータを置き換える

  12. 12

    あるデータフレームから列名を取得し、パンダの別のデータフレームに空の列として追加します

  13. 13

    日時を含むグループ化されたパンダデータフレームを単一のタイムラインにプロットする

  14. 14

    パンダのデータフレームを別のスタイルのパンダのデータフレームに変換する

  15. 15

    パンダは列名をあるデータフレームから別のデータフレームにコピーします

  16. 16

    あるデータフレームから別のデータフレームパンダにリストを展開する

  17. 17

    Python:あるデータフレームから別のデータフレームに特定のインデックスで行を挿入する

  18. 18

    R - あるデータフレームから要素のインデックスを検索し、別のデータフレームに配置する

  19. 19

    パンダ-あるデータフレームから別のデータフレームに値をマップします

  20. 20

    パンダ-あるデータフレームから別のデータフレームに値をマップします

  21. 21

    日時列に基づいてパンダのデータフレームをスライスします

  22. 22

    パンダデータフレームのタイムスタンプから月を抽出する方法は?

  23. 23

    別のデータフレームからの日付のパンダデータフレームをフィルタリングします

  24. 24

    1つのパンダデータフレームを別のデータフレームにマージし、最初のデータフレームに存在する値を2番目のデータフレームから削除します

  25. 25

    パンダのデータフレームを別のデータフレーム内に保存する

  26. 26

    パンダ-日時データフレームの毎日から最初と最後の値を取得する

  27. 27

    あるデータフレームを別のデータフレームにスライスする

  28. 28

    条件付きで別のデータフレームにデータフレームを追加するパンダ

  29. 29

    別のデータフレームに基づいてパンダデータフレームを生成する

ホットタグ

アーカイブ