【问题标题】:Selecting data from different ts dataframes in Pandas从 Pandas 中的不同 ts 数据框中选择数据
【发布时间】:2014-10-01 03:34:34
【问题描述】:

基本上,我只是希望能够将数据从另一个 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 的“长度”也是可变的,并不总是连续的。

感谢您的帮助

【问题讨论】:

  • 你试过 pd.merge() 吗?
  • @Inox 我没有。现在我会尝试。感谢您的建议。

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


【解决方案1】:

我要做的是创建 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 表中是否存在匹配项),您正在合并索引(使用索引作为键)

我想并不是所有这些都能完美运行,但这就是我们的想法

【讨论】:

  • 你的想法不是很准确,但它涵盖了你必须做的事情的要点。谢谢。
  • 很高兴它有帮助。正如我所说,并非所有这些都能完美运行,但这就是我们的想法
猜你喜欢
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多