具有两个以上数据框的熊猫的外部合并[重复]

Posted

技术标签:

【中文标题】具有两个以上数据框的熊猫的外部合并[重复]【英文标题】:Outer merge in pandas with more than two data frames [duplicate] 【发布时间】:2021-07-31 15:27:16 【问题描述】:

我有一个如下图所示的 3 个 dfs

df1:

ID      March_Number      March_Amount
A       10                200
B       4                 300
C       2                 100

df2:

ID      Feb_Number        Feb_Amount
A       1                 100
B       8                 500
E       4                 400
F       8                 100
H       4                 200

df3:

ID      Jan_Number        Jan_Amount
A       6                 800
H       3                 500
B       1                 50
G       8                 100

我尝试了下面的代码,效果很好。

df_outer = pd.merge(df1, df2, on='ID', how='outer')
df_outer = pd.merge(df_outer , df3, on='ID', how='outer')

但想将所有 df 一起传递并在短时间内合并。我尝试了下面的代码,错误如下所示。

df_outer = pd.merge(df1, df2, df3, on='ID', how='outer')

请指导我,如果我有 12 个月的数据,如何合并。即我必须合并 12 个 dfs。

错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-a63627da7233> in <module>
----> 1 df_outer = pd.merge(df1, df2, df3, on='ID', how='outer')

TypeError: merge() got multiple values for argument 'how'

预期输出:

ID  March_Number    March_Amount    Feb_Number  Feb_Amount  Jan_Number  Jan_Amount
A   10.0            200.0           1.0         100.0       6.0         800.0
B   4.0             300.0           8.0         500.0       1.0         50.0
C   2.0             100.0           NaN         NaN         NaN         NaN
E   NaN             NaN             4.0         400.0       NaN         NaN
F   NaN             NaN             8.0         100.0       NaN         NaN
H   NaN             NaN             4.0         200.0       3.0         500.0
G   NaN             NaN             NaN         NaN         8.0         100.0

【问题讨论】:

【参考方案1】:

我们可以创建一个 dfs 列表,在这种情况下,我们要合并 dfl,然后我们可以将它们合并在一起。

我们可以在dfl=[df1, df2, df3,..., dfn]中添加任意数量的dfs

from functools import reduce
dfl=[df1, df2, df3]
df_merged = reduce(lambda  left,right: pd.merge(left,right,on=['ID'],
                                            how='outer'), dfl)

输出

    ID  March_Number    March_Amount    Feb_Number  Feb_Amount  Jan_Number  Jan_Amount
0   A   10.0    200.0   1.0     0.0     6.0     800.0
1   B   4.0     300.0   8.0     500.0   1.0     50.0
2   C   2.0     100.0   NaN     NaN     NaN     NaN
3   E   NaN     NaN     4.0     400.0   NaN     NaN
4   F   NaN     NaN     8.0     0.0     NaN     NaN
5   H   NaN     NaN     4.0     200.0   3.0     500.0
6   G   NaN     NaN     NaN     NaN     8.0     100.0

【讨论】:

非常感谢,它对我有用。如果我必须合并 12 个这样的数据框,请您指导我。 nw,将所有 12 个 dfs 放入此列表 = dfl=[df1, df2, df3],我们就完成了。也更新了答案的要点

以上是关于具有两个以上数据框的熊猫的外部合并[重复]的主要内容,如果未能解决你的问题,请参考以下文章

熊猫合并具有不同名称的列并避免重复[重复]

Python合并两个具有不同日期时间的数据框[重复]

如何合并两个熊猫数据框[重复]

两个熊猫数据框的联合

合并两个数据框而不重复熊猫

合并一个值在另外两个之间的熊猫数据框[重复]