基本上,我只是希望能够将数据从另一个df1“带”到df2,并使用df2 +的索引作为选择标准。
DF1
Open High Low Close
2005-09-07 1234.50 1238.00 1231.25 1237.00
2005-09-08 1235.00 1242.75 1231.75 1238.75
2005-09-09 1237.50 1250.25 1237.50 1247.75
2005-09-12 1248.75 1251.00 1245.25 1247.00
2005-09-13 1245.25 1246.75 1237.50 1238.00
DF2
Ref
2005-09-07 1
2005-09-08 2
2005-09-09 3
期望输出= Df2
Ref 1d.Close 2d.Close 3d.Close
2005-09-07 1 1238.75 1247.75 1247.00
2005-09-08 2 1247.75 1247.00 1238.00
2005-09-09 3 1247.00 1238.00 NaN
这就是我的尝试(请不要笑):
df2['date.value'] = df2.index
df2['+1d.Date'] = df2['date.value'] + timedelta(1)
df2['1d.Close'] = df1['Close'].loc[df2['date.value']]
这种方法给了我NaN,但如果我使用:
df2['1d.Close'] = df1['Close'].loc[df2['2005-09-07']]
这会给我1238.75,这对于示例的第一行是正确的。 但由于某些原因,它在公式中不起作用。
最后的笔记:
感谢您的帮助
答案 0 :(得分:0)
我要做的是创建3个新数据帧(如果它总是想要移动1,2和3天)。每个都恰好是df1,只需将索引移动1,2和3天。
df_1 = df
df_1.index = df_1.index + 1 #not sure if that is the right calculation
重复df_2和df_3(带+2和+3)
然后我会重命名每个数据帧的列,并删除无用的列
del df_1['Open']
del df_1['High']
del df_1['Low']
df_1.columns = ['d1Close']
再次重复df_2和df_3。
然后合并:
Df2 = pd.merge(df2,df_1,how = 'left', left_index = True, right_index = True)
并重复df_2和df_3(但对于那些,请使用pd.merge(Df2,...)。
此合并表示左连接(您将保留df2中的所有值,无论df_1表中是否匹配),您将合并索引(使用索引作为键)
我想不是所有这些都能很好地完成,但这就是想法