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

Pandas如何对列部分重叠的DataFrame做外连接并优先取指定DF值

索引重叠、列重叠的DataFrame按索引外连接实现方案

直接用pandas内置的combine_first方法即可实现需求,无需额外编写自定义合并逻辑,该方法默认按索引对齐做外连接,且优先保留调用方的非空值,完全匹配“列重叠时优先取指定DataFrame值、保留两个DF全部行和列”的要求。

核心实现代码

import pandas as pd
import numpy as np

old_df = pd.DataFrame({'fruit': ['apples', 'apples', 'bananas', 'bananas'], 
                       'entree': ['steak', 'chicken', 'chicken', 'fish'], 
                       'side': ['fries', 'salad',  'salad', 'soup']}, 
                      index=[0, 1, 2, 3])

new_df = pd.DataFrame({'entree': ['chicken breast', 'salmon', 'ribeye', 'cheeseburger'],                                          
                       'side': ['greek salad', 'clam chowder', 'fries', 'fries'], 
                       'desert': ['key lime pie', 'chocolate mousse', 'tiramasu', np.nan]},                                      
                      index=[2, 3, 4, 5])

# 核心合并逻辑:优先取new_df的重叠列值,缺失位置用old_df填充
merged_df = new_df.combine_first(old_df)
# 按期望顺序调整列序,无列序要求可省略
merged_df = merged_df[['fruit', 'entree', 'side', 'desert']]

运行输出结果

执行代码后得到的结果和预期完全一致:

fruit          entree          side             desert
0  apples           steak         fries                NaN
1  apples         chicken         salad                NaN
2  bananas  chicken breast   greek salad       key lime pie
3  bananas          salmon  clam chowder  chocolate mousse
4      NaN          ribeye         fries           tiramasu
5      NaN    cheeseburger         fries                NaN

逻辑说明

  • 方法默认对两个DataFrame按索引做全外连接,自动保留所有索引行、所有列,无需额外指定连接参数
  • 重叠列、重叠索引位置的取值优先级:优先保留调用方(此处为new_df)的非空值,仅当调用方该位置为空时,才取传入的old_df对应位置的值
  • 如果需要调整优先级,优先取old_df的重叠值,只需调换调用顺序为old_df.combine_first(new_df)即可
  • 非重叠列、非重叠索引位置会自动保留对应DataFrame的原值,不存在的位置默认填充NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:03:18