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

Pandas如何根据关联键用另一DataFrame更新现有列值

Pandas 按匹配键更新指定列实现方案

这个场景是典型的一对一键值匹配填充列场景,不需要用merge做全表关联,直接用映射赋值的方式就能直接写入已有列,不会产生多余字段。

推荐方法:基于映射字典的map赋值

因为df1中每个Merge_Pr对应唯一的UniqueName,先把对应关系转成字典,直接映射赋值给目标列即可:

import pandas as pd

# 原始数据定义
df1 = pd.DataFrame({'Merge_Pr': ['BKK_AOT', 'BKK_BFS', 'BKK_TG', 'HND_ANA'],
                    'UniqueName': ['PR1', 'PR2', 'PR3', 'PR18']})

df2 = pd.DataFrame(
        {'Merge_Pr': ['BKK_AOT','BKK_AOT','BKK_BFS','BKK_TG','BKK_TG','HND_ANA','HND_ANA'],
         'Quantity':[9240, 1433, 56779, 2230, 5560, 1004, 4553],
         'Requisition_Number': ['NaN','NaN','NaN','NaN','NaN','NaN','NaN',]})

# 构建匹配键到目标值的映射
pr_map = df1.set_index('Merge_Pr')['UniqueName'].to_dict()
# 直接给已有列赋值,无新增列
df2['Requisition_Number'] = df2['Merge_Pr'].map(pr_map)

运行后打印df2,输出完全符合预期:

Merge_Pr  Quantity Requisition_Number
0   BKK_AOT      9240                PR1
1   BKK_AOT      1433                PR1
2   BKK_BFS     56779                PR2
3   BKK_TG      2230                PR3
4   BKK_TG      5560                PR3
5   HND_ANA      1004               PR18
6   HND_ANA      4553               PR18

其他可选写法

如果习惯用replace方法,也可以用同样的映射字典实现,效果一致:

df2['Requisition_Number'] = df2['Merge_Pr'].replace(pr_map)

如果一定要用merge实现,需要额外做删列、重命名操作,步骤更繁琐,不推荐:

df2 = df2.merge(
    df1, on='Merge_Pr', how='left'
).drop(columns=['Requisition_Number']).rename(columns={'UniqueName': 'Requisition_Number'})

注意:如果df1中存在重复的Merge_Pr值,不要直接用字典映射的方式,需要先对df1做去重处理,保证匹配键唯一再做映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:48:23