【问题标题】:Pandas: Merge data with different timingPandas:合并不同时间的数据
【发布时间】:2014-04-15 08:16:10
【问题描述】:

我有两个数据框,其中包含不同范围的时间序列数据。一个开始得早,结束得更早。此外,一个是每月一次,一个是每季度一次。但是,两者的索引都是 YYYY-MM-DD 的形式。有没有使用“Python”和“Pandas”合并这些数据帧的好方法?

谢谢!

/编辑 一组:

          DATE    GDP  GPDI     NFLS
0   1947-01-01  243.1  35.9  112.815
1   1947-04-01  246.3  34.5  111.253
2   1947-07-01  250.1  34.9  113.023
3   1947-10-01  260.3  43.2  111.440

另一个:

           DATE   INDPRO  M08354USM310NNBR  GDP
(...)
334  1946-11-01  13.3916               NaN  NaN
335  1946-12-01  13.4721               NaN  NaN
336  1947-01-01  13.6332              42.8  NaN
337  1947-02-01  13.7137              42.5  NaN

我想一起加入他们,这样

      DATE INDPRO  M08354USM310NNBR  GDP   GPDI     NFLS
1946-11-01 13.3916              NaN  NaN    NaN     NaN  
1946-12-01 13.4712              NaN  NaN    NaN     NaN
1947-01-01 13.6332             42.8  243.1 35.9     112.815           
1947-02-01 13.7137             42.5  NaN    NaN     NaN
(...)

【问题讨论】:

  • 您能否提供一些示例数据和您的预期输出?
  • 你只是在左侧和右侧索引上进行外部合并,列名不同吗?
  • 提供的例子。列名相同,外部合并听起来很有希望。
  • 在最终合并的 df 中,如果一个 df 是每月一次,另一个是每季度一次,您希望日期代表什么?您可以通过按日期分组并对值求和然后重置索引来修复合并的df
  • 不确定我是否理解这个问题。季度和月度日期具有相同的布局。季度数据将有 YEAR-01-01、YEAR-04-01 (...) 和月度数据有 YEAR-01-01、YEAR-02-01 (等等)。请注意,YEAR-01-01 因此对于季度和月度来说是相同的格式,并且应该包含这两种数据。这有助于澄清吗?

标签: python pandas


【解决方案1】:

只需执行合并,事实上周期不同且不重叠适合您:

merged = df1.merge(df2, on='DATE', how='outer')

merged
Out[54]:
         DATE  GDP_x  GPDI     NFLS   INDPRO  M08354USM310NNBR  GDP_y
0  1947-01-01  243.1  35.9  112.815  13.6332              42.8    NaN
1  1947-04-01  246.3  34.5  111.253      NaN               NaN    NaN
2  1947-07-01  250.1  34.9  113.023      NaN               NaN    NaN
3  1947-10-01  260.3  43.2  111.440      NaN               NaN    NaN
4  1946-11-01    NaN   NaN      NaN  13.3916               NaN    NaN
5  1946-12-01    NaN   NaN      NaN  13.4721               NaN    NaN
6  1947-02-01    NaN   NaN      NaN  13.7137              42.5    NaN

[7 rows x 7 columns]

您可以重命名、填充、删除错误的“GDP_y”列

要对合并的'DATE' 列进行排序,只需调用sort

In [57]:

merged.sort(['DATE'])
Out[57]:
         DATE  GDP_x  GPDI     NFLS   INDPRO  M08354USM310NNBR  GDP_y
4  1946-11-01    NaN   NaN      NaN  13.3916               NaN    NaN
5  1946-12-01    NaN   NaN      NaN  13.4721               NaN    NaN
0  1947-01-01  243.1  35.9  112.815  13.6332              42.8    NaN
6  1947-02-01    NaN   NaN      NaN  13.7137              42.5    NaN
1  1947-04-01  246.3  34.5  111.253      NaN               NaN    NaN
2  1947-07-01  250.1  34.9  113.023      NaN               NaN    NaN
3  1947-10-01  260.3  43.2  111.440      NaN               NaN    NaN

[7 rows x 7 columns]

【讨论】:

  • 抱歉,期间重叠 - 从我的示例中应该可以清楚地看到。在其中一个变量上应该有一些带有 NaN 的行,以及一些两个变量都填满的行。
  • 我试过 dfProd = pd.merge(dfQ[['DATE', 'GDP']], dfM[['DATE', 'INDPRO']], on='DATE' ),但是这不知何故只给了我两个变量都有值的行(我也想只选择变量的一个子集)
  • @FooBar 默认的合并类型是内部的,所以两个 dfs 中的值必须匹配,这是你想要的吗?
  • 对不起,上面的代码不是我正在做的——不知道它是如何到达我的复制粘贴中的。我做pd.merge(dfQ[['DATE', 'GDP']], dfM[['DATE', 'INDPRO']], on='DATE', how='outer')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 2018-08-06
  • 1970-01-01
  • 2019-12-13
  • 2021-01-09
相关资源
最近更新 更多