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

在Pandas分组中获取每组内各值的计数占比与计数

Pandas分组计算每组内类别计数及占比问题

原始DataFrame

import pandas as pd
df = pd.DataFrame({"id":[1,1,1,1,2,2,2],
                  "car":["Volvo","Audi","Volvo","Volvo","VW","Audi","Volvo"]})

需求说明

按id分组后,获取每组内各car值的计数占比(ratio)与具体计数(count),期望得到如下格式的结果:

ratio    count
    car
id 
1   Audi   0.25     1
    Volvo  0.75     3
2   Audi   0.33     1
    Volvo  0.33     1
    VW     0.33     1

已尝试方法及问题

  • 按id分组后用自定义聚合函数调用value_counts(normalize=True),但结果中ratio以列表形式返回,不符合目标格式
  • 按id和car分组后聚合,得到的ratio全为1.0,因为占比是在car子组内计算,而非id组内的整体占比

解决方案(一次groupby.agg实现)

通过在groupby.agg中为count和ratio分别指定基于value_counts的lambda函数,再调整索引结构即可实现需求:

# 执行聚合并调整索引
result = df.groupby('id')['car'].agg(
    count=lambda s: s.value_counts(),
    ratio=lambda s: s.value_counts(normalize=True)
).stack(level=1).swaplevel(0, 1).sort_index()

# 可选:将ratio保留两位小数
result['ratio'] = result['ratio'].round(2)

执行后得到的结果与期望格式一致,且仅通过一次分组操作完成,保证了效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:40:39