为何Pandas GroupBy统计非零值用sum()而非count()?
问题解答:为什么Pandas统计非零值要用sum()而非count()
这本质是Pandas里布尔序列的count()和sum()方法行为差异导致的,拆解来看:
错误代码的问题
你最初的代码(语法存在括号错误,正确写法应为lambda x: (x>0).count()),核心问题出在count()的作用逻辑:
count()统计的是序列里所有非缺失值的总数,不管元素是True还是False,只要不是NaN都会被计入。所以它返回的是整个分组的总记录数,自然不是你要的非零值次数。
为什么sum()能得到正确结果
当你改用(x>0).sum()时:
x>0会把分组里的每个值转换成布尔值:非零值对应True,零值对应False。- 在Pandas的数值计算中,
True会被当作1,False当作0。sum()就是把这些1和0累加,最终结果正好是True的数量,也就是非零值的出现次数。
拿你的示例验证:
Room='a'的分组Value是[3,3,0],x>0得到[True,True,False],sum()后结果为1+1+0=2,正好是该分组的非零值次数;而count()会返回3(总记录数)。
额外小技巧
你也可以用更直观的Pandas方法替代x>0,比如x.ne(0)(判断不等于0)或者x.gt(0)(判断大于0),搭配sum()效果完全一致,示例代码:
nonBlankOccasion =('Value', lambda x: x.ne(0).sum())
内容的提问来源于stack exchange,提问作者elac
相关产品推荐
相关产品推荐

