首页 > 解决方案 > Pandas 数据框使用多列连接

问题描述

我正在使用多列进行数据框外连接:

DF1:

ColumnA ColumnB ColumnC ColumnD
1          2      3        4
1          2      3        4

DF2:

ColumnE ColumnF ColumnG ColumnH
1          2      3        4
1          2      3        4

合并代码:

df= pd.merge(DF1, DF2, left_on=['ColumnA','ColumnB','ColumnC','ColumnD'], right_on=['ColumnE','ColumnF','ColumnG','ColumnH'], how='outer')

实际结果:

ColumnA ColumnB ColumnC ColumnD ColumnE ColumnF ColumnG ColumnH
1        2       3       4         1      2       3       4
1        2       3       4         1      2       3       4
1        2       3       4         1      2       3       4
1        2       3       4         1      2       3       4

预期结果(值应仅显示两次,因为列组合在两个数据集中完全匹配):

ColumnA ColumnB ColumnC ColumnD ColumnE ColumnF ColumnG ColumnH
1        2       3       4         1      2       3       4
1        2       3       4         1      2       3       4

有人可以建议我哪里出错了吗?

标签: pythonpandasdataframe

解决方案


df1您在和上都有相同的重复项df2,因此每个重复项的合并df行数加倍。简单的解决方案是保持一个数据帧的唯一性,drop_duplicates并且merge

df = pd.merge(df1.drop_duplicates(), df2, left_on=['ColumnA','ColumnB' ,'ColumnC','ColumnD'], right_on=['ColumnE','ColumnF','ColumnG','ColumnH'], how='outer')

Out[742]:
   ColumnA  ColumnB  ColumnC  ColumnD  ColumnE  ColumnF  ColumnG  ColumnH
0        1        2        3        4        1        2        3        4
1        1        2        3        4        1        2        3        4

推荐阅读