你好,我是python和pandas的新手
我有两个数据帧,一个在“每日”粒度较高的时间范围内,一个在每小时粒度较低的时间范围内。我想做的是将“趋势”数据从较高的时间范围追加到当天相同的较低的时间范围。我有麻烦了我的DataFrame具有日期时间索引,看起来像这样:
更长的时间范围:
time state
2015-06-03 22:00:00 bullish
2015-06-04 22:00:00 bullish
2015-06-05 22:00:00 bearish
2015-06-06 22:00:00 bullish
2015-06-07 22:00:00 bullish
2015-06-08 22:00:00 bullish
缩短时间范围:
time state
2015-06-05 05:00:00 bullish
2015-06-05 09:00:00 bullish
2015-06-05 13:00:00 bullish
2015-06-05 17:00:00 bullish
2015-06-07 21:00:00 bullish
2015-06-08 01:00:00 bullish
我想要的结果将如下所示:
time state trend
2015-06-05 05:00:00 bullish bearish
2015-06-05 09:00:00 bullish bearish
2015-06-05 13:00:00 bullish bearish
2015-06-05 17:00:00 bullish bearish
2015-06-07 21:00:00 bullish bullish
2015-06-08 01:00:00 bullish bullish
非常感谢任何帮助!
答案 0 :(得分:1)
使用merge_asof
:
d = {'state_x':'state','state_y':'trend'}
df = pd.merge_asof(df2, df1, on='time', direction='forward').rename(columns=d)
print (df)
time state trend
0 2015-06-05 05:00:00 bullish bearish
1 2015-06-05 09:00:00 bullish bearish
2 2015-06-05 13:00:00 bullish bearish
3 2015-06-05 17:00:00 bullish bearish
4 2015-06-07 21:00:00 bullish bullish
5 2015-06-08 01:00:00 bullish bullish