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

如何在Pandas的groupby分组中基于多维度计算分组占比百分比

实现代码

你可以在现有代码的基础上追加以下逻辑,按年份维度统计分组占比即可:

import pandas as pd

# 你原有代码部分
d = {
    'year': [2000, 2000, 2001, 2001, 2001, 2001],
    'cat': ["A", "A", "A", "B", "B", "B", ],
    'bin': [0, 1, 0, 1, 0, 1],
}
df = pd.DataFrame(data=d)
df["count"] = 1
df_groupby = df.groupby(["year", "cat"]).agg({"bin": "mean", "count": "sum"})
df_groupby.rename(columns={"bin": "mean"}, inplace=True)

# 新增pct列逻辑
# 计算每一年的总样本量
year_total_count = df_groupby['count'].groupby(level="year").transform("sum")
# 计算百分比并格式化
df_groupby['pct'] = (df_groupby['count'] / year_total_count * 100).astype(int).astype(str) + "%"
# 可选:将mean保留2位小数,匹配示例输出格式
df_groupby['mean'] = df_groupby['mean'].round(2)
# 可选:将多级索引转为普通列,和你给出的结果表结构完全一致
df_groupby = df_groupby.reset_index()

逻辑说明

  • 你之前得到的df_groupby是以year、cat作为两级多级索引的DataFrame,使用groupby(level="year")可以将相同年份的行归为一组
  • transform("sum")会返回和原DataFrame行数完全一致的结果,每个位置对应所属年份的总count值,不需要手动对齐索引
  • 计算占比后直接做类型转换拼接百分号,就可以得到你需要的pct列格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 00:15:10