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

Pandas按id分组计算is_good为1的占比 缺失类别自动补0方法

解决方法

方法1:直接用均值计算(最简便)

因为is_good列本身就是0/1二元取值,每组的均值刚好等于取值为1的样本占比,直接分组聚合即可,天然适配全0/全1的分组场景:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'id': ['a1','a1','a1','bb','bb','bb','bb','c1','c1','d2','d2'],
    'is_good': [1,1,0,1,0,0,0,0,0,1,1]
})

# 分组计算占比,保留两位小数
result = df.groupby('id', as_index=False)['is_good'].agg(
    is_good_perc = lambda x: round(x.mean(), 2)
)
print(result)

输出结果:

id  is_good_perc
0  a1          0.67
1  bb          0.25
2  c1          0.00
3  d2          1.00

如果需要把1.00显示为1、0.00显示为0可以自行调整数值格式。

方法2:基于value_counts补全缺失值

如果确实需要用value_counts实现,可以在分组后通过unstack把取值转成列,缺失的取值自动填充0,再提取1的占比即可:

# 分组统计占比后unstack补全缺失的0/1取值
count_norm = df.groupby('id')['is_good'].value_counts(normalize=True).unstack(fill_value=0).reset_index()
# 重命名列、提取需要的字段
result = count_norm.rename(columns={1: 'is_good_perc'})[['id', 'is_good_perc']]
# 保留两位小数
result['is_good_perc'] = result['is_good_perc'].round(2)

内容的提问来源于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 06:39:01