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

如何在DataFrame中匹配值并将对应字段赋值到另一DataFrame

需求实现方案(基于Python Pandas)

该需求的核心是将df2中分散在多列的匹配值整理为统一的映射关系,再和df1的指定列关联赋值,具体实现如下:

  1. 重构df2生成映射表
    将df2中用于匹配的nr1/nr2/nr3列转换为单列,保留对应的code值,生成「匹配值-编码」的一对一映射表,避免多列匹配的复杂逻辑。
  2. 关联匹配赋值
    将df1的contract-nr.列和映射表的匹配值做左连接,将匹配到的code值赋值给df1的ID列即可。

完整可运行代码

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'ID': ['+', '+', '+'],
    'contract-nr.': ['bc7', 'bx9', 'df4']
})

df2 = pd.DataFrame({
    'code': [1133, 1222, 1456],
    'nr1': ['k2f', 'df4', 'rs6'],
    'nr2': ['bx9', 'gp7', 'ks0'],
    'nr3': ['h3d', 'kl9', 'bc7']
})

# 生成df2映射表
df2_map = df2.melt(
    id_vars='code', 
    value_vars=['nr1', 'nr2', 'nr3'], 
    value_name='match_val'
)[['code', 'match_val']].drop_duplicates()

# 匹配赋值
df1 = df1.merge(df2_map, left_on='contract-nr.', right_on='match_val', how='left')
df1['ID'] = df1['code']
df1 = df1[['ID', 'contract-nr.']]

# 输出结果
print(df1)

运行结果

ID contract-nr.
0  1456          bc7
1  1133          bx9
2  1222          df4

如果存在contract-nr.在df2中匹配不到的情况,对应ID会赋值为NaN,可根据需要用fillna方法填充默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:57:02