首页 > 解决方案 > 使用 pandas 连接两个数据框中的不同列(并附加相似的列)

问题描述

我的问题与 Pandas Merge 密切相关- 如何避免重复列 但不完全相同。

我想连接三个数据框中不同的列。数据框有一个列 ID,以及一些相同的列:例如。

df1

id place name qty unit A 
1 NY    Tom   2  10   a
2 TK    Ron   3  15   a
3 Lon   Don   5  90   a
4 Hk    Sam   4  49   a

df2

id place name qty unit B 
1 NY    Tom   2  10   b
2 TK    Ron   3  15   b
3 Lon   Don   5  90   b
4 Hk    Sam   4  49   b

df3

id place name qty unit C D
1 NY    Tom   2  10   c d
2 TK    Ron   3  15   c d
3 Lon   Don   5  90   c d
4 Hk    Sam   4  49   c d

结果:

id place name qty unit A B C D
1 NY    Tom   2  10   a b c d
2 TK    Ron   3  15   a b c d
3 Lon   Don   5  90   a b c d
4 Hk    Sam   4  49   a b c d

列地点、名称、数量和单位将始终是三个数据框的一部分,不同列的名称可能会有所不同(在我的示例中为 A、B、C、D)。这三个数据帧具有相同的行数。

我努力了:

cols_to_use = df1.columns - df2.columns
dfNew = merge(df, df2[cols_to_use], left_index=True, right_index=True, how='outer')

问题是我得到了比预期更多的行,并且在结果数据框中重命名了列(使用 concat 时)。

标签: pythonpandasdataframemergeconcat

解决方案


使用reduce来自functools

from functools import reduce
reduce(lambda left,right: pd.merge(left,right), [df1,df2,df3])
Out[725]: 
   id place name  qty  unit  A  B  C  D
0   1    NY  Tom    2    10  a  b  c  d
1   2    TK  Ron    3    15  a  b  c  d
2   3   Lon  Don    5    90  a  b  c  d
3   4    Hk  Sam    4    49  a  b  c  d

推荐阅读