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