Python 从Pandas中的不同ts数据帧中选择数据

Python 从Pandas中的不同ts数据帧中选择数据,python,python-2.7,pandas,time-series,dataframe,Python,Python 2.7,Pandas,Time Series,Dataframe,基本上,我只是希望能够将数据从另一个df1带到df2,使用df2+的索引作为选择标准 df1 df2 期望输出=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 这

基本上,我只是希望能够将数据从另一个df1带到df2,使用df2+的索引作为选择标准

df1

df2

期望输出=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,这对于示例的第一行是正确的。 但由于某种原因,它在公式中不起作用

最后说明:

df2上的日期并不总是连续的 timedelta的长度也是可变的,并不总是连续的。
感谢您的帮助

如果您要转换的时间总是1天、2天和3天,那么我要做的就是创建3个新的数据帧。每一个都是df1,只是指数移动了1、2和3天

df_1 = df
df_1.index = df_1.index + 1 #not sure if that is the right calculation
用+2和+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.mergeDf2

此合并意味着一个左连接,您将保留来自df2的所有值,无论df_1表中是否有匹配项,您都将使用索引作为键在索引上进行合并


我想并不是所有这些都能很好地工作,但这就是我的想法

你尝试过pd.merge吗?@Inox我没有。现在我试试看。谢谢你的建议。你的想法不是很具体或准确,但它涵盖了你必须做的事情的要点。谢谢。很高兴这有帮助。正如我所说,并不是所有这些都能完美地工作,但这就是我的想法
del df_1['Open']
del df_1['High']
del df_1['Low']
df_1.columns = ['d1Close']
Df2 = pd.merge(df2,df_1,how =  'left', left_index = True, right_index = True)