如何在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
相关产品推荐
相关产品推荐

