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

