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

Pandas基于多列groupby计算占比并新增列合并至原DataFrame问题

Pandas 分组计算列占比并新增到原DataFrame实现方案

实现逻辑

  • 使用groupby.transform()完成分组聚合结果的行对齐,无需额外合并操作即可直接在原DataFrame上新增列,保留所有原有字段
  • 以['state', 'office_id', 'sales_year']作为分组键,分别对sales、counts列计算分组总和,每行对应值除以分组总和乘以100得到占比

完整可运行代码

import numpy as np
import pandas as pd
np.random.seed(0)
df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3,
               'office_id': list(range(1, 7)) * 2,
               'counts': list(range(1, 3)) * 6,
               'sales_year': [np.random.randint(2019, 2021) for _ in range(12)],
               'sales': [np.random.randint(100000, 999999) for _ in range(12)]})
# 新增sales占比列,round参数可自行调整保留的小数位数
df['aggr_sales'] = (df['sales'] / df.groupby(['state', 'office_id', 'sales_year'])['sales'].transform('sum') * 100).round(2)
# 新增counts占比列
df['aggr_counts'] = (df['counts'] / df.groupby(['state', 'office_id', 'sales_year'])['counts'].transform('sum') * 100).round(2)
# 输出最终结果
print(df)

补充说明

如果占比计算规则为对应更高层级分组的总和(比如同sales_year下的全局总和),只需修改groupby内的分组键即可,整体实现逻辑不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:27:03