私は1つのデータフレームを持っていdf_60
ます。それは60分の時間粒度です。そしてもう1つは30分の粒度ですdf_30
。値をの列からの列に移動し、値が表示さdf_60
れるdf_30
期間を維持したいと思います。
つまり、日付が2011-01-05 00:00:00 0
1時間ごとの粒度であり、列の値val
が1であるとします。60分のデータフレームの列が常に30分単位の時間枠の値を「入力」するには、どうすればよいですか。 xに等しい?
>>>df_60
dt_hr_idx val #here val = 1 for times between 2am and 4am
2011-01-05 00:00:00 0
2011-01-05 01:00:00 0
2011-01-05 02:00:00 1
2011-01-05 03:00:00 1
2011-01-05 04:00:00 0
>>>df_30
dt_hlaf_hr_idx val #df_30 val column is currently blank
2011-01-05 00:00:00 0
2011-01-05 00:30:00 0
2011-01-05 01:00:00 0
2011-01-05 01:30:00 0
2011-01-05 02:00:00 0
2011-01-05 02:30:00 0
2011-01-05 03:00:00 0
2011-01-05 03:30:00 0
2011-01-05 04:00:00 0
#desired df
df_30
dt_hlaf_hr_idx val #val should be 1 for values between 2am and 4am
2011-01-05 00:00:00 0
2011-01-05 00:30:00 0
2011-01-05 01:00:00 0
2011-01-05 01:30:00 0
2011-01-05 02:00:00 1
2011-01-05 02:30:00 1
2011-01-05 03:00:00 1
2011-01-05 03:30:00 1
2011-01-05 04:00:00 0
ループで何かをハックすることはできますが、正しい方法はありますか?
ありがとう。
Series.reindex
と一緒に使用ffill
:
df = df_60.reindex(df_30.index, method='ffill')
print (df)
val
2011-01-05 00:00:00 0
2011-01-05 00:30:00 0
2011-01-05 01:00:00 0
2011-01-05 01:30:00 0
2011-01-05 02:00:00 1
2011-01-05 02:30:00 1
2011-01-05 03:00:00 1
2011-01-05 03:30:00 1
2011-01-05 04:00:00 0
別の解決策merge_asof
:
df = pd.merge_asof(df_30, df_60, left_index=True, right_index=True)
print (df)
val_x val_y
2011-01-05 00:00:00 0 0
2011-01-05 00:30:00 0 0
2011-01-05 01:00:00 0 0
2011-01-05 01:30:00 0 0
2011-01-05 02:00:00 0 1
2011-01-05 02:30:00 0 1
2011-01-05 03:00:00 0 1
2011-01-05 03:30:00 0 1
2011-01-05 04:00:00 0 0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加