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

Pandas使用groupby+value_counts时如何保留所有分类避免行缺失

解决方案

方案1:显式重索引(推荐,灵活度高)

提前定义work字段的所有合法取值,在统计后通过reindex补全缺失类别,无需插入冗余的dummy行:

import pandas as pd

data = [{'name':'John', 'date':20210801, 'work':False}, 
        {'name':'John', 'date':20210802, 'work':False}, 
        {'name':'Lucy', 'date':20210801, 'work':False}]
df = pd.DataFrame(data)

# 定义work字段的所有可能取值
work_all = [False, True]

res = df.groupby('name')['work'].value_counts(normalize=True) \
        .unstack(fill_value=0) \
        # 强制补全所有work类别
        .reindex(columns=work_all, fill_value=0) \
        .stack() \
        .reset_index(name='proportion')

输出结果:

name   work  proportion
0  John  False         1.0
1  John   True         0.0
2  Lucy  False         1.0
3  Lucy   True         0.0

方案2:设置分类类型(适合固定取值的字段)

如果work字段的取值固定不会变化,可以直接将其设置为pandas分类类型,后续所有分组统计操作都会自动保留全部类别:

# 将work设为分类类型,指定所有可选值
df['work'] = pd.Categorical(df['work'], categories=[False, True])

# 直接运行你原来的代码即可得到完整结构的输出
res = df.groupby('name')['work'].value_counts(normalize=True) \
        .unstack(fill_value=0) \
        .stack() \
        .reset_index(name='proportion')

内容的提问来源于stack exchange,提问作者abisko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:21:01