我的问题与Pandas Merge - How to avoid duplicating columns but not identical. 密切相关
我想连接三个数据帧中不同的列 . 数据框有一个列id,有些列是相同的:Ex .
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时) .
4 回答
您只能从
df2
(和类似的df3
)中提取df1
中尚未存在的那些列 . 然后只需使用pd.concat连接数据框:使用
reduce
来自functools
您可以使用嵌套合并
使用
concat
与groupby
和first
: