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

Python中如何实现多列求和时全空值返回NaN而非0?

问题:Pandas求和时保留全NaN行的NaN结果

原始数据

创建如下DataFrame:

import pandas as pd
import numpy as np

d = pd.DataFrame({'col1': [1, np.nan, np.nan, 4, 7],
                  'col2': [4, 5, np.nan, 9, 5]})

需求与问题

要求当col1和col2均为NaN时,两列的求和结果也为NaN。但使用以下代码求和时,全NaN行的SUM值会返回0.0,不符合需求:

d['SUM'] = d[['col1', 'col2']].sum(axis=1)

执行后得到的结果:

col1  col2  SUM
0   1.0   4.0  5.0
1   NaN   5.0  5.0
2   NaN   NaN  0.0
3   4.0   9.0 13.0
4   7.0   5.0 12.0

解决方案

有两种简单的实现方式:

方法一:使用sum的min_count参数

sum方法的min_count参数可指定计算求和所需的最小非NaN值数量。将其设为1,当行中所有值都是NaN时,无法满足最小数量要求,会返回NaN:

d['SUM'] = d[['col1', 'col2']].sum(axis=1, min_count=1)

方法二:先求和再替换全NaN行

先正常求和,再通过判断每行是否全为NaN,将对应行的SUM值替换为NaN:

d['SUM'] = d[['col1', 'col2']].sum(axis=1)
# 筛选出col1和col2全为NaN的行,将SUM设为NaN
d.loc[d[['col1', 'col2']].isna().all(axis=1), 'SUM'] = np.nan

最终结果

执行上述任意一种方法后,得到符合需求的结果:

col1  col2   SUM
0   1.0   4.0   5.0
1   NaN   5.0   5.0
2   NaN   NaN   NaN
3   4.0   9.0  13.0
4   7.0   5.0  12.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:15:40