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

如何按索引并集合并Pandas DataFrame 重叠时优先取指定数据源

Pandas索引重叠优先取指定表数据的合并方案

核心需求

  • 两个DataFrame按索引合并,结果索引为两表索引的并集
  • 重叠索引对应的数据优先取指定DataFrame(本示例优先取df2)

方案1:使用combine_first(最简便)

该方法是Pandas专门为优先级合并场景设计的,代码简洁易读:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'Fruit':['Apple','Orange','Banana','Pear'],'State':['Ripe','Not Ripe','Ripe','Ripe']},index=['A','B','C','E'])
df2 = pd.DataFrame({'Fruit':['Orange','Banana','Apple','Orange'],'State':['Not Ripe','Ripe','Ripe','Ripe']},index=['B','D','E','F'])

# 优先取df2的数据,df2不存在的索引用df1补充,最后按索引排序
df3 = df2.combine_first(df1).sort_index()

运行后得到的df3和你给出的预期结果完全一致。


方案2:使用merge实现(匹配你提到的merge函数需求)

merge实现的核心参数配置如下:

  • 开启left_index=True、right_index=True:指定按两表的索引做关联
  • how='outer':取两表索引的并集作为结果索引
  • 手动处理重叠列,优先取df2的数值
# 按索引外连接,重叠列自动加后缀区分
merged_df = df1.merge(df2, left_index=True, right_index=True, how='outer', suffixes=('_df1', '_df2'))

# 逐列优先取df2的值,为空时取df1的值
for col in df1.columns:
    merged_df[col] = merged_df[f'{col}_df2'].fillna(merged_df[f'{col}_df1'])

# 保留目标列,按索引排序
df3 = merged_df[df1.columns].sort_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:00:02