如何在groupby分组后统计DataFrame指定列中特定值的占比
Pandas按id分组统计is_good列取值为1的占比实现方法
核心实现代码
因为你的is_good是0/1编码字段,1的占比天然等于分组内该列的平均值,也可以用通用统计逻辑兼容非0/1编码的场景,完整可运行代码如下:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'id': ['a1', 'a1', 'a1', 'bb', 'bb', 'bb', 'bb'], 'is_good': [1, 1, 0, 1, 0, 0, 0] }) # 执行groupby后聚合计算占比 result = df.groupby('id', as_index=False)['is_good'].agg( # 通用写法,所有场景都适用 is_good_perc = lambda x: round((x == 1).sum() / x.count(), 2) # 针对0/1编码的简化写法:is_good_perc = lambda x: round(x.mean(), 2) ) print(result)
运行输出结果
完全符合你的预期:
id is_good_perc 0 a1 0.67 1 bb 0.25
逻辑说明
执行groupby("id")后,只需要对is_good列做自定义聚合操作即可:
- 先统计分组内
is_good等于1的行数 - 除以分组内总行数得到占比
- 用
round()方法保留2位小数 - 参数
as_index=False是为了让分组键id作为普通列输出,而非行索引,符合你预期的结果结构。
内容的提问来源于stack exchange,提问作者french_fries
相关产品推荐
相关产品推荐

