如何按索引并集合并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
相关产品推荐
相关产品推荐

