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

Pandas如何基于匹配键用另一DataFrame值更新现有列

实现pandas按关联键更新原有列值

样例数据

持有的两个DataFrame定义如下:

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': [None, None, None, None, None, None, None]})

核心需求为以Merge_Pr列为匹配键,将df1中UniqueName的对应值直接更新到df2已有的Requisition_Number列,不生成冗余新列。

最优实现方法

由于df1中每个Merge_Pr值唯一对应一个UniqueName,直接用map方法做键值映射赋值即可,逻辑简单、运行效率高,不会产生多余列:

  1. 先将df1转换为匹配键到目标值的映射字典
    pr_name_map = df1.set_index('Merge_Pr')['UniqueName'].to_dict()
    
  2. 直接对df2的目标列赋值完成匹配更新
    df2['Requisition_Number'] = df2['Merge_Pr'].map(pr_name_map)
    

执行完成后df2的输出结果如下,完全符合匹配预期:

Merge_PrQuantityRequisition_Number
BKK_AOT9240PR1
BKK_AOT1433PR1
BKK_BFS56779PR2
BKK_TG2230PR3
BKK_TG5560PR3
HND_ANA1004PR18
HND_ANA4553PR18

补充说明

  • 如果后续Requisition_Number列存在部分已填充的非空值,不想被匹配结果覆盖,可以把赋值逻辑替换为如下写法,仅填充空值:
    df2['Requisition_Number'] = df2['Requisition_Number'].fillna(df2['Merge_Pr'].map(pr_name_map))
    
  • 不推荐用merge实现该需求,merge会生成临时新列,需要额外做列赋值和删列操作,代码冗余度高,仅作参考:
    df2 = df2.merge(df1.rename(columns={'UniqueName':'_temp'}), on='Merge_Pr', how='left')
    df2['Requisition_Number'] = df2['_temp']
    df2 = df2.drop(columns='_temp')
    

内容的提问来源于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 15:01:07