如何使用 Pandas 基于键列高效替换 DataFrame 中的值-Python教程

本文介绍如何利用 pandas 的 `map()` 或 `merge()` 方法,根据另一个 dataframe 中的映射关系(如按 `name` 列),批量更新目标 dataframe 中对应字段(如 `value`)的值,适用于 `name` 在源表中非唯一、但在映射表中唯一的典型场景。

在数据清洗与整合任务中,常需用一个“参考表”(如 df2)中的最新/标准值,去覆盖主表(如 df1)中同名字段的旧值。本例中,df1 的 name 列存在重复(如 emma 出现两次),而 df2 的 name 是唯一键,且仅包含部分映射项(emma→2, mark→3),其余行应保持原值不变——这正适合使用 索引映射(map) 方式,简洁、高效且语义清晰。

推荐首选方法:Series.map()(最直观、性能优)

# 构建示例数据
import pandas as pd

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 = pd.DataFrame({
    'id': [1, 2],
    'name': ['emma', 'mark'],
    'value': [2, 3]
})

# 创建 name → value 的映射字典(自动去重,以 df2 中首次出现为准)
value_map = df2.set_index('name')['value'].to_dict()

# 使用 map 替换 df1 中的 value,未匹配项保留原值(fillna 不必要,map 默认返回 NaN,故用 fillna)
df1['value'] = df1['name'].map(value_map).fillna(df1['value']).astype(df1['value'].dtype)

print(df1)

输出结果完全符合预期:

   id   country  name  value
0   1   romania  john  100.0
1   2    russia  emma    2.0
2   3       usa  mark    3.0
3   4     china  emma    2.0
4   5  portugal  nick  200.0

⚠️ 注意事项:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 如何使用 Pandas 基于键列高效替换 DataFrame 中的值-Python教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4023789+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4023789+
  • 本周更新: 0+
  • 最后更新: 2026-03-16