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

如何使用Python Pandas通过name列用另一DataFrame的值替换目标DataFrame的值?

问题描述

需要通过name列,用DataFrame df2中的value值替换DataFrame df1里的value值。注意:df1的name列存在重复值,df2的name列是唯一的。

原始数据

df1

idcountrynamevalue
1romaniajohn100
2russiaemma200
3usamark400
4chinaemma300
5portugalnick200

df2

idnamevalue
1emma2
2mark3

期望结果

idcountrynamevalue
1romaniajohn100
2russiaemma2
3usamark3
4chinaemma2
5portugalnick200
解决方案

可以用Pandas的map()方法结合字典映射实现,以下是具体步骤:

方法实现

  1. 从df2构建name到value的映射关系(利用df2的name唯一性):
value_mapping = df2.set_index('name')['value'].to_dict()
  1. 用映射关系替换df1的value列,同时保留不在映射中的原始值:
df1['value'] = df1['name'].map(value_mapping).fillna(df1['value'])

也可以合并成一行代码,无需单独创建字典:

df1['value'] = df1['name'].map(df2.set_index('name')['value']).fillna(df1['value'])

完整代码示例

import pandas as pd

# 初始化df1
df1 = pd.DataFrame({
    'id': [1, 2, 3, 4, 5],
    'country': ['romania', 'russia', 'usa', 'china', 'portugal'],
    'name': ['john', 'emma', 'mark', 'emma', 'nick'],
    'value': [100, 200, 400, 300, 200]
})

# 初始化df2
df2 = pd.DataFrame({
    'id': [1, 2],
    'name': ['emma', 'mark'],
    'value': [2, 3]
})

# 执行替换操作
df1['value'] = df1['name'].map(df2.set_index('name')['value']).fillna(df1['value'])

# 输出结果
print(df1)

代码说明

  • df2.set_index('name')['value']:将df2的name设为索引,提取对应value序列,实现按name快速匹配值。
  • map():将df1的每个name值映射到df2对应的value,不存在的name会返回NaN。
  • fillna(df1['value']):把NaN替换为df1原有的value,确保仅替换df2中存在的name对应值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:55:20