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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:46:01