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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:39:04