如何合并索引重叠但无值重叠的Pandas DataFrames
合并重叠索引的DataFrame并填补NaN值
这是个很典型的DataFrame数据补全场景,你当前的逐列处理方法虽然能解决问题,但确实有更简洁的内置方案可以一步到位——Pandas的combine_first()函数完美适配你的需求!
方法原理
combine_first()的核心逻辑正好匹配你的场景:它会优先保留第一个DataFrame的非NaN值,用第二个DataFrame中的对应非NaN值填补第一个DataFrame的空缺,同时自动合并两个DataFrame中所有存在的索引和列,完全不需要手动逐列处理。
具体实现代码
先还原你给出的两个示例DataFrame:
import pandas as pd import numpy as np # 第一个DataFrame df1 = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3', 'A4'], 'B': ['B0', 'B1', 'B2', np.nan, np.nan], 'C': ['C0', 'C1', np.nan, np.nan, np.nan] }) # 第二个DataFrame df2 = pd.DataFrame({ 'A': [np.nan, np.nan, np.nan, 'A5', 'A6'], 'B': [np.nan, 'B3', 'B4', 'B5', 'B6'], 'C': ['C2', 'C3', 'C4', 'C5', 'C6'] }, index=[2, 3, 4, 5, 6])
只需要一行代码就能完成合并补全:
df_combined = df1.combine_first(df2)
验证结果
运行后得到的df_combined完全符合你的期望:
A B C 0 A0 B0 C0 1 A1 B1 C1 2 A2 B2 C2 3 A3 B3 C3 4 A4 B4 C4 5 A5 B5 C5 6 A6 B6 C6
方案优势
- 代码简洁易读,无需手动遍历列,降低出错概率
- 自动处理索引和列的匹配,不用担心遗漏行或列
- 基于Pandas底层优化实现,比手动循环效率更高
内容的提问来源于stack exchange,提问作者LevDavidovich
相关产品推荐
相关产品推荐

