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

Pandas如何通过另一DataFrame按ID更新指定列,保持其他值不变

高效实现方案

以下两种方案均为pandas原生矢量化操作,底层由C实现,性能远高于自行编写的for循环,处理十万级、百万级数据也不会有性能瓶颈:

方法1:map映射法(推荐,性能最优)

仅需提取匹配所需的ID和Item字段生成映射关系,内存占用低,执行速度最快:

import pandas as pd

# 构造示例DataFrame,实际使用时可以跳过这步,用自己已有的df即可
applesdf = pd.DataFrame({
    'ID': [1],
    'Item': ['Apple'],
    'Price': [2],
    'Location':[1001]
})
applesaucedf = pd.DataFrame({
    'ID': [1],
    'Item': ['Applesauce'],
    'Price': [3],
    'Location':[1002]
})

# 生成ID到对应Item的映射序列
id_to_item = applesaucedf.set_index('ID')['Item']
# 替换applesdf的Item列,ID匹配不到的会保留原有值
applesdf['Item'] = applesdf['ID'].map(id_to_item).fillna(applesdf['Item'])

方法2:merge关联法

适合后续需要扩展匹配多列的场景,逻辑更直观:

# 仅取匹配需要的列做左关联,避免覆盖applesdf的其他字段
applesdf = applesdf.merge(
    applesaucedf[['ID', 'Item']],
    on='ID',
    how='left',
    suffixes=('_old', '')
)
# 匹配成功的用新Item值,不成功的保留原值
applesdf['Item'] = applesdf['Item'].fillna(applesdf['Item_old'])
# 删除冗余的旧Item列
applesdf = applesdf.drop('Item_old', axis=1)

运行两种方法后输出的applesdf都符合预期结果:

IDItemPriceLocation
1Applesauce21001
官方文档查阅说明

你可以直接在pandas官方文档检索以下内容查阅相关用法:

  • pandas.Series.map 函数的参数说明与使用示例
  • pandas.DataFrame.merge 函数的关联规则说明
  • 文档板块「Merge, join, concatenate and compare」下的多表关联操作指南

内容的提问来源于stack exchange,提问作者i.d.s.chicago

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:54:00