如何在Pandas中基于匹配列将指定列值复制到另一个DataFrame
实现方法
方法1:使用merge表关联(最推荐)
这是Pandas处理多表字段匹配的标准方案,指定两个表共同的关联键invoice,使用左关联模式保证Dataframe2的原有行数不会丢失,直接就能拉取匹配到的match_code字段:
# 仅需一行代码即可完成匹配 df2 = df2.merge(df1, on='invoice', how='left')
方法2:使用map映射(适合仅新增单个列的场景)
如果只需要新增单个匹配列,可以先把Dataframe1的对应关系转为字典映射,再直接给Dataframe2赋值新列,执行效率更高:
# 构建invoice到match_code的映射字典 invoice_map = df1.set_index('invoice')['match_code'].to_dict() # 给df2新增match_code列,按invoice匹配取值 df2['match_code'] = df2['invoice'].map(invoice_map)
补充说明
你之前用apply未实现需求,大概率是逐行匹配的逻辑编写有误,且apply属于逐行遍历操作,数据量较大时执行效率远低于上述两种向量化操作,非特殊场景不推荐使用。
以下是可直接运行的完整测试代码:
import pandas as pd # 构造示例DataFrame df1 = pd.DataFrame({ 'invoice': [1,2,3,4], 'match_code': [5,6,7,8] }) df2 = pd.DataFrame({ 'invoice': [1,2,3] }) # 两个方法二选一执行即可 # 方法1代码 df2 = df2.merge(df1, on='invoice', how='left') # 方法2代码 # invoice_map = df1.set_index('invoice')['match_code'].to_dict() # df2['match_code'] = df2['invoice'].map(invoice_map) print(df2)
运行后输出结果和你预期一致:
invoice match_code 0 1 5 1 2 6 2 3 7
内容的提问来源于stack exchange,提问作者Mahalingam Sundararaj
相关产品推荐
相关产品推荐

