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

如何基于另一DataFrame替换指定列值并保留原DataFrame其余数据

pandas实现按匹配列替换指定字段值

方法一:使用map + fillna

这种方法简洁高效,适合小数据集:

  1. 将df2转换为以name为键、value为值的字典
  2. 用df1的name列映射该字典,得到替换后的临时列
  3. 用fillna保留原df1中未匹配到的value值
import pandas as pd

# 创建df1
df1 = pd.DataFrame({
    'country': ['romania', 'russia', 'sua', 'china'],
    'name': ['john', 'emma', 'mark', 'jack'],
    'value': [100, 200, 300, 400]
})

# 创建df2
df2 = pd.DataFrame({
    'name': ['emma', 'mark'],
    'value': [2, 3]
})

# 转换为字典
value_map = df2.set_index('name')['value'].to_dict()

# 替换并保留原未匹配值
df1['value'] = df1['name'].map(value_map).fillna(df1['value']).astype(int)

print(df1)

输出结果:

country   name  value
0  romania   john    100
1   russia   emma      2
2     sua   mark      3
3    china   jack    400

方法二:使用merge合并填充

适合需要保留更多中间信息的场景:

  1. 将df1与df2按name左连接
  2. 用df2的value列填充空值,得到新的value列
  3. 清理多余列并调整列顺序
import pandas as pd

# 创建数据框
df1 = pd.DataFrame({
    'country': ['romania', 'russia', 'sua', 'china'],
    'name': ['john', 'emma', 'mark', 'jack'],
    'value': [100, 200, 300, 400]
})

df2 = pd.DataFrame({
    'name': ['emma', 'mark'],
    'value': [2, 3]
})

# 左连接,添加后缀区分两个value列
merged_df = df1.merge(df2, on='name', how='left', suffixes=('_original', '_new'))

# 用新值替换,无匹配则保留原值
merged_df['value'] = merged_df['value_new'].fillna(merged_df['value_original']).astype(int)

# 清理多余列
df3 = merged_df[['country', 'name', 'value']]

print(df3)

输出结果与方法一一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:10:29