存在空值时如何正确计算年初至今(YTD)的累计和?
问题原因
Pandas 中使用+运算符对多列执行求和运算时,只要参与计算的任意一个值为空值NaN,整行的计算结果就会返回NaN,这是导致含空值行计算结果异常的核心原因。
优化方案
使用DataFrame.sum()方法按行求和即可解决该问题,该方法默认会自动忽略空值NaN,代码如下:
# 计算2019年1-6月YTD累计值 df['YTD19'] = df[['January 19', 'February 19', 'March 19', 'April 19', 'May 19', 'June 19']].sum(axis=1) # 计算2020年1-6月YTD累计值 df['YTD20'] = df[['January 20', 'February 20', 'March 20', 'April 20', 'May 20', 'June 20']].sum(axis=1)
如果需要区分「全空值行」和「有数值且求和结果为0」的场景,可以添加min_count=1参数:整行所有值都为空时返回NaN,至少有1个非空值时才返回求和结果,代码如下:
df['YTD19'] = df[['January 19', 'February 19', 'March 19', 'April 19', 'May 19', 'June 19']].sum(axis=1, min_count=1) df['YTD20'] = df[['January 20', 'February 20', 'March 20', 'April 20', 'May 20', 'June 20']].sum(axis=1, min_count=1)
内容的提问来源于stack exchange,提问作者nikita1221
相关产品推荐
相关产品推荐

