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

Pandas两个DataFrame按name列匹配替换对应Code列值的问题

错误原因

df.replace()默认会扫描整个DataFrame的所有单元格,只要单元格值匹配字典的键就会执行替换,所以你name列的1234567刚好命中字典的键,被错误替换为了H74,原代码没有指定替换规则仅作用于Code列、且匹配条件是name列的值相等。

正确实现方案

方案1:使用map方法(最简单高效)

注意不要用dict作为变量名,这是Python内置关键字,会覆盖原生功能:

# 构建name到Code的映射字典
code_map = df1.set_index('name')['Code'].to_dict()
# 按name列匹配映射Code值,未匹配到的保留df2原有Code
df2['Code'] = df2['name'].map(code_map).fillna(df2['Code'])

方案2:使用merge方法(适合多字段匹配的复杂场景)

# 左连接合并两个DataFrame,区分不同来源的Code列
df2 = df2.merge(df1, on='name', how='left', suffixes=('', '_df1'))
# 优先取df1的Code,未匹配到的用df2原有Code填充
df2['Code'] = df2['Code_df1'].fillna(df2['Code'])
# 删除合并产生的多余列
df2.drop('Code_df1', axis=1, inplace=True)

两种方案执行后都可以得到你预期的结果:

nameCode
1234567H74
1234321J12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:09:01