如何对索引基本一致的两个DataFrame进行内容相加?附示例
如何对索引/列基本一致的两个DataFrame进行内容相加?
嘿,这个场景我太熟了!当你需要让两个索引、列部分重叠的DataFrame按对应位置相加,并且把其中一方缺失的行/列默认当作0来处理时,pandas的add()方法搭配fill_value=0参数就是最优解。
先还原你给出的示例数据:
import pandas as pd # 构建df1 df1 = pd.DataFrame( [[0, 3, 1], [3, 0, 2], [1, 2, 0]], index=['A', 'B', 'C'], columns=['A', 'B', 'C'] ) # 构建df2 df2 = pd.DataFrame( [[0, 1, 1, 0], [1, 0, 3, 2], [1, 3, 0, 0], [0, 2, 0, 0]], index=['A', 'B', 'C', 'D'], columns=['A', 'B', 'C', 'D'] )
为什么不直接用+运算符?
如果你直接写df1 + df2,结果里会出现大量NaN——因为df1没有D行和D列,这些位置在相加时会被视为缺失值,完全不符合你想要把缺失位置当作0相加的需求。
最优实现方式
用add()方法并指定fill_value=0,它会自动对齐两个DataFrame的索引和列,把一方缺失的位置用0填充后再相加:
# 执行相加,缺失值用0填充 result = df1.add(df2, fill_value=0) # 如果需要整数类型,转换一下 result = result.astype(int) print(result)
输出结果完全符合你的预期:
A B C D A 0 4 2 0 B 4 0 5 2 C 2 5 0 0 D 0 2 0 0
额外说明
这个方法的核心优势:
- 无需手动补全两个DataFrame的缺失行/列,pandas会自动完成索引和列的对齐
- 可以灵活指定填充值(不止0,其他数值也适用)
- 性能高效,比手动循环或者合并后处理的速度快得多
内容的提问来源于stack exchange,提问作者mikael
相关产品推荐
相关产品推荐

