Python 熊猫:用不同的时间合并数据

Python 熊猫:用不同的时间合并数据,python,pandas,Python,Pandas,我有两个数据帧,其中包含不同范围的时间序列数据。一个人开始得早,结束得早。另外,一个是每月一次,一个是每季度一次。然而,两者的索引都是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

我有两个数据帧,其中包含不同范围的时间序列数据。一个人开始得早,结束得早。另外,一个是每月一次,一个是每季度一次。然而,两者的索引都是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
(...)

只需执行合并—事实上,时段不同且不重叠适合您:

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]

您能提供一些示例数据和预期输出吗?您只需在左侧和右侧索引上进行外部合并,列名是否不同?提供了示例。列名相同,外部合并听起来很有希望。在最终合并的df中,如果一个df是每月一次,而另一个是季度一次,您希望日期代表什么?您可以通过按日期分组并对值求和,然后重置索引来修复合并后的df。不确定我是否理解这个问题。季度和月度日期都有相同的布局。季度数据包括01-01年、04-01年(…),月度数据包括01-01年、02-01年(等)。请注意,因此,01-01年度的季度和月度格式相同,应保存这两个数据。这有助于澄清吗?对不起,周期重叠-从我的示例中应该很清楚。其中一个变量上应该有一些带有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')