我有两个数据框。一个具有5分钟的粒度(df1),另一个具有天数(df2)索引。为了这个例子,这一天在7:10结束
df1:
Date Close
2019-06-20 07:00:00 2927.25
2019-06-20 07:05:00 2927.00
2019-06-20 07:10:00 2926.75
2019-06-21 07:00:00 2932.25
2019-06-21 07:05:00 2932.25
2019-06-21 07:10:00 2931.00
2019-06-24 07:00:00 2941.75
2019-06-24 07:05:00 2942.25
2019-06-24 07:10:00 2941.50
2019-06-25 07:00:00 2925.50
2019-06-25 07:05:00 2926.50
2019-06-25 07:10:00 2926.50
df2:
range
Date
2019-06-20 115.0
2019-06-21 86.0
2019-06-24 52.0
2019-06-25 132.0
现在,我想从df2的“范围”列中获取值,并将它们重复地注入df1的新列中。
它看起来应该像这样:
Date Close range
2019-06-20 07:00:00 2927.25 115.0
2019-06-20 07:05:00 2927.00 115.0
2019-06-20 07:10:00 2926.75 115.0
2019-06-21 07:00:00 2932.25 86.0
2019-06-21 07:05:00 2932.25 86.0
2019-06-21 07:10:00 2931.00 86.0
2019-06-24 07:00:00 2941.75 52.0
2019-06-24 07:05:00 2942.25 52.0
2019-06-24 07:10:00 2941.50 52.0
2019-06-25 07:00:00 2925.50 132.0
2019-06-25 07:05:00 2926.50 132.0
2019-06-25 07:10:00 2926.50 132.0
不幸的是,我不知道如何开始,这就是为什么没有“我的尝试”代码的原因。
首先将日期(如列)转换为pandas datetime系列:
df1['Date'] = pd.to_datetime(df1['Date'])
df2.index = pd.to_datetime(df2.index)
使用Series.dt.date
+Series.map
映射range
从df2
到的值df1
:
df1['range'] = df1['Date'].dt.date.map(df2.set_index(df2.index.date)['range'])
或也可以使用DataFrame.merge
:
df1.assign(k=df1['Date'].dt.date).merge(df2.assign(k=df2.index.date), on='k').drop('k', 1)
结果:
Date Close range
0 2019-06-20 07:00:00 2927.25 115.0
1 2019-06-20 07:05:00 2927.00 115.0
2 2019-06-20 07:10:00 2926.75 115.0
3 2019-06-21 07:00:00 2932.25 86.0
4 2019-06-21 07:05:00 2932.25 86.0
5 2019-06-21 07:10:00 2931.00 86.0
6 2019-06-24 07:00:00 2941.75 52.0
7 2019-06-24 07:05:00 2942.25 52.0
8 2019-06-24 07:10:00 2941.50 52.0
9 2019-06-25 07:00:00 2925.50 132.0
10 2019-06-25 07:05:00 2926.50 132.0
11 2019-06-25 07:10:00 2926.50 132.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句