You need to enable JavaScript to run this app. 如何在Pandas中基于匹配列将指定列值复制到另一个DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:24:08