基于索引和列合并两个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
相关产品推荐
相关产品推荐

