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

Pandas如何匹配两个DataFrame指定列值并替换对应列内容

Pandas 按SICCode匹配替换DF2字段值方案

你之前用.map/.isin/if-else没成功,核心原因是没提前处理DF1里同一个SICCode对应多个Industry Title的重复问题——你给出的样例里SICCode=4941在DF1同时对应两个行业名,不先做去重映射的话,匹配时会出现值冲突、返回空值的问题。

可直接运行的实现代码

  1. 先构造去重的映射字典,每个SICCode只保留第一次出现对应的行业名,避免多值冲突
# 去重逻辑:同一SICCode取DF1中第一条记录的Industry Title作为映射值
sic_map = DF1.drop_duplicates(subset="SICCode", keep="first")\
             .set_index("SICCode")["Industry Title"]\
             .to_dict()
  1. 批量替换DF2的Sector列,匹配不到的SICCode保留原有Sector值
DF2["Sector"] = DF2["SICCode"].map(sic_map).fillna(DF2["Sector"])

替换后结果

针对你给出的样例数据,替换后的DF2如下,完全符合需求:

SICCodeSector
4941AGRICULTURAL PRODUCTION-CROPS
7374AGRICULTURAL PROD-LIVESTOCK & ANIMAL SPECIALTIES
5065AGRICULTURAL SERVICES
4941AGRICULTURAL PRODUCTION-CROPS
5122FISHING, HUNTING AND TRAPPING

之前方法失效的常见原因

  • 用.map时没有先对DF1的SICCode去重,同一编码对应多个行业名时,映射关系混乱导致返回空值
  • 用.isin只能判断值是否存在,无法关联拿到对应的Industry Title值,没法完成替换
  • 手写if-else逐行遍历效率低,且大多没处理重复编码的映射优先级,容易出现值覆盖错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:03:10