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
相关产品推荐
相关产品推荐

