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

Pandas:含NaN值的两列相加实现指定逻辑

实现含NaN值的Pandas DataFrame列相加需求

你提到的需求完全可以用Pandas的内置方法来实现,不需要自己写复杂的逻辑。默认的a + b会在任一位置为NaN时返回NaN,不符合你的要求,我们可以通过以下两种内置方法组合来达到目标:

方法一:填充NaN后相加,再恢复双NaN位置的结果

这种方法先把单个NaN替换为0进行计算,再把原始数据中两者都是NaN的位置恢复成NaN,完美匹配你的需求:

import pandas as pd
import numpy as np

a = pd.DataFrame([1, np.NaN, 4, 5])
b = pd.DataFrame([3, np.NaN, 5, np.NaN])

# 第一步:将NaN替换为0后相加
sum_filled = a.fillna(0) + b.fillna(0)
# 第二步:用mask()把双NaN的位置设回NaN
sum_final = sum_filled.mask(a.isna() & b.isna())

print(sum_final)

执行后输出:

0
0  4.0
1  NaN
2  9.0
3  5.0

方法二:使用add()方法结合填充值与掩码

Pandas的add()方法本身支持fill_value参数,可以直接在相加时填充NaN,再配合掩码修正双NaN的情况,代码更简洁:

sum_add = a.add(b, fill_value=0)
sum_final = sum_add.mask(a.isna() & b.isna())

这段代码的输出和方法一完全一致,add(b, fill_value=0)会自动把相加时遇到的NaN替换为0,再通过mask()把原始双NaN的位置恢复成NaN。

两种方法都用到了Pandas的内置函数:fillna()、add()、mask()以及布尔索引,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:18:03