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

pandas按两列分组后如何计算组层级的百分比占比

实现方法

你已经写出了分组计数的代码,后续只需要按region维度对计数做组内归一化,就能得到需要的占比,两种实现方式如下:

基于现有计数逻辑改造

在你原有代码的基础上,对多级索引的计数结果按region层级分组,用组内各gender的计数除以组内总计数即可:

# 原有计数逻辑
count_res = df.groupby(['region', 'gender']).size().rename("count")

# 计算占比
share_res = count_res.groupby(level=0)
    .apply(lambda group: group / group.sum())
    .rename("share")
    .reset_index()
    # 保留两位小数匹配示例输出
    .assign(share=lambda df: df.share.round(2))

输出结果:

region gender  share
0      A      F   0.50
1      A      M   0.50
2      B      F   0.67
3      B      M   0.33

如果不需要四舍五入,要严格得到你示例里的0.33、0.66,把round逻辑换成两位截断即可:.assign(share=lambda df: df.share.apply(lambda x: int(x*100)/100))

一步到位的简洁写法

用pandas的value_counts自带的归一化参数,不需要手动写除法逻辑,直接输出占比结果:

share_res = df.groupby('region')['gender']
             .value_counts(normalize=True)
             .rename("share")
             .reset_index()
             .assign(share=lambda df: df.share.round(2))

参数说明:normalize=True会自动将计数转换为对应维度的占比,由于是在groupby('region')之后调用,占比的计算基准是每个region分组内的总样本量,完全匹配需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 01:15:40