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

时间:2014-08-07 19:03:59

标签: python python-2.7 pandas time-series dataframe

基本上,我只是希望能够将数据从另一个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,这对于示例的第一行是正确的。 但由于某些原因,它在公式中不起作用。

最后的笔记:

  • df2上的日期并不总是连续的
  • timedelta的“长度”也是可变的,并不总是连续的。

感谢您的帮助

1 个答案:

答案 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表中是否匹配),您将合并索引(使用索引作为键)

我想不是所有这些都能很好地完成,但这就是想法