Pandas:如何在分组内计算忽略0值的平均值?
解决方案
要实现分组计算时忽略0值的平均值,可以通过以下两种方法解决:
方法一:将0替换为缺失值后求均值
Pandas的mean()方法默认会忽略缺失值(NaN),因此可以先把数据中的0替换为pd.NA,再执行分组求均值操作:
import pandas as pd # 替换0为缺失值,再分组计算均值 result = df.replace(0, pd.NA).groupby('name', as_index=False).mean()
这个方法简单高效,适合大多数场景。
方法二:使用自定义聚合函数
通过自定义lambda函数,对每组的每一列筛选出非0值后计算均值:
# 自定义聚合逻辑,仅计算非0值的均值 result = df.groupby('name', as_index=False).agg(lambda col: col[col != 0].mean())
如果需要保留原列的数据类型特性,这个方法同样适用。
验证示例数据
以你提供的___Backyard Jr. (__Xinyi)分组为例:
- star列非0值为[4,3,4,3],均值为3.5
- atm列非0值为[4],均值为4.0
- food列非0值为[4,3],均值为3.5
两种方法都能得到符合要求的结果。
内容的提问来源于stack exchange,提问作者Arren Zhou
相关产品推荐
相关产品推荐

