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

基于索引和列合并两个DataFrame的实现方法求助(附实例)

解决方案

你需要的是基于索引的外连接,同时合并重叠列,保留两个DataFrame中对应位置的有效值(当两者值相同时直接保留,一方缺失时取另一方的值)。可以用pandas的以下两种方法实现:

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

这个方法会自动对齐索引和列,用右侧DataFrame的值补充左侧的缺失值,完全匹配你的需求:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame(
    {'A': ['0', 'a', 'b'],
     'B': ['a', '0', 'c'],
     'C': ['b', 'c', '0']},
    index=['index 1', 'index 2', 'index 3']
)

df2 = pd.DataFrame(
    {'B': ['0', 'c', 'd'],
     'C': ['c', '0', 'e'],
     'D': ['d', 'e', '0']},
    index=['index 2', 'index 3', 'index 4']
)

# 合并得到目标df3
df3 = df1.combine_first(df2)
print(df3)

输出结果:

A  B  C    D
index 1   0  a  b  NaN
index 2   a  0  c    d
index 3   b  c  0    e
index 4 NaN  d  e    0

方法2:使用merge+ 合并重叠列

如果需要自定义重叠列的处理逻辑,可以先通过索引外连接,再合并重叠列:

# 基于索引外连接,重叠列会被标记为_x(来自df1)、_y(来自df2)
merged = pd.merge(df1, df2, left_index=True, right_index=True, how='outer', suffixes=('_x', '_y'))

# 合并重叠列B和C:优先取df1的值,df1缺失时取df2的值
merged['B'] = merged['B_x'].fillna(merged['B_y'])
merged['C'] = merged['C_x'].fillna(merged['C_y'])

# 保留需要的列,删除临时列
df3 = merged[['A', 'B', 'C', 'D']]
print(df3)

此方法输出与方法1完全一致,适合需要更灵活控制的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:55:33