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

如何在pandas中基于另一DataFrame的映射为df2填充id新列

pandas 多列组合匹配映射生成新列实现方案

核心思路是先把df1里的no1、no2组合对应id的规则做成可复用的映射,再分别匹配df2的两组字段生成目标id列:

方法1:字典映射法(推荐,性能更高)

适合数据量较大的场景,避免逐行遍历开销:

# 1. 构建 (no1, no2) 组合到id的映射关系
id_map = df1.set_index(['no1', 'no2'])['id']

# 2. 分别匹配两组字段生成id1、id2
df2['id1'] = id_map.reindex(pd.MultiIndex.from_frame(df2[['no1', 'no2']])).values
df2['id2'] = id_map.reindex(pd.MultiIndex.from_frame(df2[['no3', 'no4']])).values

如果数据量小,也可以用更直观的apply写法:

id_map = df1.set_index(['no1', 'no2'])['id'].to_dict()
df2['id1'] = df2.apply(lambda x: id_map[(x['no1'], x['no2'])], axis=1)
df2['id2'] = df2.apply(lambda x: id_map[(x['no3'], x['no4'])], axis=1)

方法2:merge拼接法

逻辑更直观,适合小数据量场景:

# 关联no1、no2生成id1
df2 = df2.merge(df1, on=['no1', 'no2'], how='left').rename(columns={'id':'id1'})
# 重命名df1字段后关联no3、no4生成id2
df2 = df2.merge(df1.rename(columns={'no1':'no3', 'no2':'no4'}), on=['no3', 'no4'], how='left').rename(columns={'id':'id2'})

两种方法输出的结果均和你给出的预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:06:03