python - 使用 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 时)。
解决方案
使用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
推荐阅读
- graphql - 在 Vert.x 中将 Observable 连接到 SingleInterop
- javascript - 是否有用于读取图像特定部分的 npm 包或 web api?
- javascript - 将项目 ID 从卡传递到模态
- pagespeed-insights - 如何解决“引荐来源网址 https://www.googleapis.com/ 与引荐来源网址限制不匹配...”
- vba - Powerpoint - 仅限 VBA - 插入自定义项目符号列表
- javascript - 如何以编程方式调用自动完成下拉菜单?
- elasticsearch - 通过两个条件过滤数组的弹性搜索查询
- c# - 如何阅读 JSON 文档的各个部分?
- java - JPanel 布局 - 添加文本框和重新排列组件
- html - 如何在表格的 tr 下插入列表