python - 匹配两列中的数据并将匹配添加到数据框
问题描述
我有两个数据框:第一个数据框
Column1 Column2 Column3 0 A1 B1 C1 1 A2 B2 C2 2 A3 B3 C3 2 A4 B4 C4
第二个数据框
Column1 Column2 0 A1 S1 1 B3 S2 2 A3 S3 3 B5 S4 4 A5 S5
我想在数据框 1 中的 Column1、COlumn2 和数据框 2 中的 Column1 上加入这两个表
Whatever A* value from DF2 matches with Column1 values in DF1, the corresponding Column2 value goes into Column 4 in output. Whatever D* value from DF2 matches with Column1 values in DF1, the corresponding Column2 value goes into Column 5 in output.
输出应该是这样的:
Column1 Column2 Column3 Column4 Column5 0 A1 B1 C1 S1 1 A2 B2 C2 2 A3 B3 C3 S3 S2 2 A4 B4 C4
A1 匹配,因此 S1 进入第 4 列 B3 匹配,因此 S2 进入第 5 列 A3 匹配,因此 S3 进入第 4 列 B5 不匹配,因此根本不显示 A5 不匹配,因此根本不显示。
我这样做的肮脏方式是将 A* 和 B* 值分离到两个单独的数据帧中,并使用外连接将它们合并。但我正在寻找一种无需为 df2 数据创建两个单独的数据集即可实现此目的的方法。
解决方案
以下代码在您的示例中完成了这项工作:
result_df = (
df1.merge(
df2.rename({'Column2': 'Column4'}, axis='columns'), how='left', on=['Column1']
)
.merge(
df2.rename({'Column2': 'Column5'}, axis='columns'),
how='left',
left_on=['Column2'],
right_on=['Column1'],
)
.drop(['Column1_y'], axis='columns')
.rename({'Column1_x': 'Column1'}, axis='columns')
)
我对最后两个命令drop
并不满意,rename
但我无法避免第二次合并中列的重复。
编辑:忘记了axis
最后一个rename
函数中的参数。
推荐阅读
- powerapps - 在 PowerApps 门户中显示 Dataverse 图像
- apache-kafka - Kafka Ignite Sink Connector - Ignite 的配置文件
- ios - 在 SwiftUI 中按日期分组
- javascript - 从 nginx 服务器获取 pdf 或 csv 下载的 href url 链接
- python-3.x - Discord.py 检测已删除消息不起作用
- php - 从 Live Hosted Server 到本地 XAMPP 的网站备份失败
- android - 在 Android 中以编程方式创建 URL 快捷方式
- flutter - 如何使 SliverGrid 居中?
- python-3.x - 在定义了“with”语句的类中多次尝试使用相同的 SUIT
- node.js - 为什么订阅方法返回订阅者而不是响应值