【问题标题】:How to concatenate three pandas dataframe [duplicate]如何连接三个熊猫数据框[重复]
【发布时间】:2021-07-02 00:57:48
【问题描述】:

我有三个 pandas 数据框:df1、df2、df3,如下所示:

df1=

X Y M1_x M2_x M3_x
12 33 3 4 2
12 54 0 3 4
23 12 0 8 3

df2=

X Y M1_y M2_y M3_y
12 33 9 4 1
12 54 0 3 5
12 11 0 2 1

df3=

X Y M1_z M2_z M3_z
12 33 1 40 10
11 10 10 30 0
12 11 0 40 5

我喜欢连接两个 df 并得到合并的数据框,如下所示:

结果 =

X Y M1_x M2_x M3_x M1_y M2_y M3_y M1_z M2_z M3_z
12 33 3 4 2 9 4 1 1 40 10
12 54 0 3 4 0 3 5 nan nan nan
23 12 0 8 3 nan nan nan nan nan nan
12 11 nan nan nan 0 2 1 0 40 5
11 10 nan nan nan nan nan nan 10 30 0

我已经尝试过 p.cocatenate 函数,问题是选择axis = 1,不合并[X,Y]列,然后我在结果文件中有双[X,Y]列,选择axis = 0 , 不合并行,我得到行的联合,而不是合并共同的 [X,Y] 彼此。 我怎样才能做到这一点?

编辑: 我知道合并两个数据框时如何使用合并功能。我的问题是我有两个以上(实际上是 4 个)数据库要合并。有没有什么函数可以在一行中合并两个以上的dfs?

【问题讨论】:

  • 将错误的欺骗改正。
  • In dupe 也是处理多个 DataFrame 的解决方案。

标签: python pandas dataframe merge concatenation


【解决方案1】:

使用pandas.DataFrame.merge指定如何合并(外合并):

>>> df1.merge(df2, 'outer').merge(df3, 'outer')
   X   Y   M1_x   M2_x   M3_x  M1_y   M2_y   M3_y  M1_z   M2_z   M3_z
0  12  33    3.0    4.0   2.0    9.0    4.0   1.0    1.0   40.0  10.0
1  12  54    0.0    3.0   4.0    0.0    3.0   5.0    NaN    NaN   NaN
2  23  12    0.0    8.0   3.0    NaN    NaN   NaN    NaN    NaN   NaN
3  12  11    NaN    NaN   NaN    0.0    2.0   1.0    0.0   40.0   5.0
4  11  10    NaN    NaN   NaN    NaN    NaN   NaN   10.0   30.0   0.0

如果你有更多的数据框,你可以这样做:

out = df1.copy()
dfs = [df2,df3,df4,df5,df6]
for df in dfs:
    out = out.merge(df, 'outer')

此图阐明了不同类型的合并(pandas 默认使用内部合并):

【讨论】:

  • 感谢您的回复。好吧,我想总结一下我的问题并将 dfs 的数量减少到两个。我真正的问题是处理 4 个 dfs。是否仍然可以使用您的解决方案?
  • @maedenasri 当然,您只需要在合并时“链接”合并或循环通过您的数据框列表:)
  • 非常感谢,效果很好!
【解决方案2】:

检查这是否有帮助。

new_df = pd.merge(df1, df2,  how='outer')

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

【讨论】:

  • 顺便说一句,这并没有在问题中给出预期的结果。
  • how 参数从left 更改为outer...它将起作用
猜你喜欢
  • 2018-09-13
  • 2016-03-13
  • 2014-07-03
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2013-02-07
相关资源
最近更新 更多