You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于df1的多列匹配df2的id3实现两个Pandas DataFrame的合并

实现方案

方法1:宽转长匹配(扩展性更强)

核心思路是把df1的多个待匹配id列转换为统一的长格式匹配列,和df2匹配完成后再关联回原df1的宽表结构,适合后续需要扩展更多匹配列的场景:

import pandas as pd

# 构造测试数据
df1 = pd.DataFrame({'id1':[3,2,1,4,5],'id2':[8,7,6,9,10]})
df2 = pd.DataFrame({'id3':[6,2,8,5,4],'Name':['a','b','c','e','d']})

# 给df1添加行标记,保留原行顺序
df1['row_id'] = df1.index
# 把id1、id2转换为长格式匹配列
df1_melt = df1.melt(id_vars='row_id', value_vars=['id1', 'id2'], value_name='match_id')
# 和df2完成匹配
match_result = df1_melt.merge(df2, left_on='match_id', right_on='id3', how='inner')
# 关联回原df1,删除冗余列得到最终结果
final = df1.merge(match_result[['row_id', 'id3', 'Name']], on='row_id').drop(columns='row_id')

输出final即可得到目标结果:

id1  id2  id3 Name
0    3    8    8    c
1    2    7    2    b
2    1    6    6    a
3    4    9    4    d
4    5   10    5    e

方法2:双匹配合并(代码更简洁)

如果只有2个匹配列,可以直接分别按id1、id2匹配df2后合并结果:

merge_by_id1 = df1.merge(df2, left_on='id1', right_on='id3', how='inner')
merge_by_id2 = df1.merge(df2, left_on='id2', right_on='id3', how='inner')
final = pd.concat([merge_by_id1, merge_by_id2]).sort_values('id1').reset_index(drop=True)

内容的提问来源于stack exchange,提问作者Prakash Dahal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:09:04