首页 > 解决方案 > 结合两个长度不等的熊猫数据框/表

问题描述

我有两个不同长度的数据框:

df1:                           df2:
  Column1  Column2             ColumnA ColumnG ColumnSG
0    ab1       bc1                ab1      A      AA
1    ab2       ab5                bc1      B      BB   
2    ab3       bc4                ab3      C      CC
3    ab4       ab5                ab1      D      DD
4    ab5       ab1                ab5      E      EE 
                                  bc4      F      FF    
                                  ab2      G      GG
                                  ab4      H      HH

我想要一个看起来像这样的输出:

df1:

输出

到目前为止我尝试了什么?

for row in df1, df2:
   if df1[Column1] == df2[ColumnA]:
      df1[ColumnG1] = df2[ColumnG]
      df1[ColumnSG1] = df2[ColumnSG]

但是,这给了我一个错误说:

ValueError: Can only compare identically-labeled Series objects

我该如何解决这个问题?

标签: python-3.xpandasdataframe

解决方案


是否合并两次:

(df1.merge(df2.rename(columns={"ColumnA":'Column1'}), on='Column1',how='left')
    .merge(df2.rename(columns={'ColumnA':'Column2'}), on='Column2',how='left',
           suffixes=['1','2'])
)

输出:

  Column1 Column2 ColumnG1 ColumnSG1 ColumnG2 ColumnSG2
0     ab1     bc1        A        AA        B        BB
1     ab1     bc1        D        DD        B        BB
2     ab2     ab5        G        GG        E        EE
3     ab3     bc4        C        CC        F        FF
4     ab4     ab5        H        HH        E        EE
5     ab5     ab1        E        EE        A        AA
6     ab5     ab1        E        EE        D        DD

推荐阅读