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

Python中合并含重复索引DataFrame并以新值覆盖旧值的实现方法

实现方案

以下所有方法都可以实现你需要的合并逻辑:重复索引优先保留后一个DataFrame(df2)的取值,自动合并所有索引。

你提供的示例数据如下:

import pandas as pd
df1 = pd.DataFrame({'values': [1, 2, 3]}, index=['a', 'b', 'c'])
df2 = pd.DataFrame({'values': [4, 5, 6]}, index=['c', 'd', 'e'])

方法1:使用combine_first(最简洁)

该方法会自动取两个DataFrame的索引并集,优先保留调用方法的对象的非空值,空缺位置用参数传入的DataFrame的值填充,符合你需要的优先级逻辑。

# df2优先级更高,所以用df2调用方法,传入df1
result = df2.combine_first(df1)
# 如果需要固定索引顺序可加下一行,默认返回按字母排序的索引
result = result.reindex(['a','b','c','d','e'])

输出结果:

values
a       1
b       2
c       4
d       5
e       6

方法2:使用concat + 索引去重(适合多DataFrame合并场景)

先按「优先级从低到高」的顺序拼接所有DataFrame,再按索引去重,保留最后出现的取值即可,适合2个以上DataFrame批量合并的场景。

concat_df = pd.concat([df1, df2])
# keep='last'表示重复索引保留最后出现的那行
result = concat_df.loc[~concat_df.index.duplicated(keep='last')]
# 按字母排序索引
result = result.sort_index()

方法3:使用reindex + fillna(逻辑最直观)

先取两个DataFrame的索引并集,再用df2重索引到这个并集,空缺位置用df1填充,逻辑易懂便于自定义调整。

# 取两个索引的并集
union_index = df1.index.union(df2.index)
# 用df2优先填充,空缺部分补df1的取值
result = df2.reindex(union_index).fillna(df1)

注意事项

  • 所有方法默认返回按字母排序的索引,如果需要自定义顺序可以用reindex指定目标索引列表即可
  • 如果两个DataFrame有多个列,上述方法会自动按列名匹配处理,不需要额外调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:36:01