我必须将数据帧df1和df2
包含在内df1的内容是:
date high low close C B T R
1 2020-09-16 1.29257 1.28146 1.28884 1.287623 1.287015 1.288232 0.000000
2 2020-09-17 1.30074 1.28747 1.29662 1.294943 1.294105 1.295782 1.298102
df2的内容是:
time open high low
0 2020-09-16 22:54:00 1.29708 1.29711 1.29695
1 2020-09-16 22:55:00 1.29698 1.29703 1.29681
2 2020-09-17 22:56:00 1.29701 1.29709 1.29689
3 2020-09-17 22:57:00 1.29702 1.29720 1.29701
4 2020-09-17 22:58:00 1.29717 1.29720 1.29715
我想添加两个数据框。df1的列C将被添加到df2的方式应该导致新的数据帧,该数据帧必须相对于时间是恒定的。
预期的数据帧df3将如下所示
time open high low c
0 2020-09-16 22:54:00 1.29708 1.29711 1.29695 1.287623
1 2020-09-16 22:55:00 1.29698 1.29703 1.29681 1.287623
2 2020-09-17 22:56:00 1.29701 1.29709 1.29689 1.294943
3 2020-09-17 22:57:00 1.29702 1.29720 1.29701 1.294943
4 2020-09-17 22:58:00 1.29717 1.29720 1.29715 1.294943
对于第0行和第1行,C为1.28763,因为对于日期2020-09-16,c为1.28763。
对于第2.3行和第4行,C为1.294943,因为对于2020-09-17日期,c为1.294943。
让我们尝试将dict
of映射df1.date: df1.C
到中的日期提取df2.time
。
df2['C']=(pd.to_datetime(df2.time).dt.date).astype(str).map(dict(zip(df1.date,df1.C)))
这个怎么运作
#Extract date from df2.time
df2['temp']=pd.to_datetime(df2.time).dt.date
#Create dict from df1.date and df1.C
D=dict(zip(df1.date,df1.C))
#Create new column df['C'] by mapping D to df2.temp
df2.temp.map(D)
结果
time open high low C
0 2020-09-16 22:54:00 1.29708 1.29711 1.29695 1.287623
1 2020-09-16 22:55:00 1.29698 1.29703 1.29681 1.287623
2 2020-09-17 22:56:00 1.29701 1.29709 1.29689 1.294943
3 2020-09-17 22:57:00 1.29702 1.29720 1.29701 1.294943
4 2020-09-17 22:58:00 1.29717 1.29720 1.29715 1.294943
也可以按照@Erfan的建议
#Rename columns of df1 as follows
df1=df1[["date", "C"]].rename(columns={"date": "time"})
#Coerce df2.time to date
df2['time']=pd.to_datetime(df2['time']).dt.date
#Merge df2 and df1
df2.merge(df1, how='left')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句