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

如何用Python从新DataFrame更新旧DataFrame的数据?

解决方案

先创建示例数据方便复现:

import pandas as pd

old_df = pd.DataFrame({'Id': [1, 2], 'Value': ['aaa*', 'BBB']})
new_df = pd.DataFrame({'Id': [1, 3], 'Value': ['AAA', 'CCC']})

方法1:concat + 去重

将新旧DataFrame合并后,按Id去重并保留最新的记录(新DataFrame的内容):

# 合并时把新DataFrame放在后面,确保去重时优先保留新数据
combined = pd.concat([old_df, new_df])
result = combined.drop_duplicates(subset='Id', keep='last').sort_values('Id').reset_index(drop=True)

方法2:索引对齐 + combine_first

将Id设为索引,利用combine_first实现“新数据覆盖旧数据,旧数据保留未匹配项,新增新数据项”:

# 分别设置Id为索引
old_indexed = old_df.set_index('Id')
new_indexed = new_df.set_index('Id')

# 用新数据作为基础,旧数据填充缺失项,刚好满足需求
result = new_indexed.combine_first(old_indexed).reset_index()

两种方法最终得到的结果都是:

IdValue
1AAA
2BBB
3CCC

为什么之前的方法没成功?

  • update:仅更新与目标DataFrame索引、列完全匹配的项,不会新增行,所以Id=3的记录无法加入
  • merge:默认内连接会丢失Id=2的记录;外连接会生成缺失值列,需要额外处理才能合并成单一Value列
  • concat:如果不去重,会保留重复的Id=1行,不符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:54:59