这显然很简单,但作为一个麻木的新手,我被卡住了。
我有一个 CSV 文件,其中包含 3 列,即州、办公室 ID 和该办公室的销售额。
我想计算给定州每个办公室的销售额百分比(每个州所有百分比的总和为 100%)。
df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3,
'office_id': range(1, 7) * 2,
'sales': [np.random.randint(100000, 999999)
for _ in range(12)]})
df.groupby(['state', 'office_id']).agg({'sales': 'sum'})
这将返回:
sales
state office_id
AZ 2 839507
4 373917
6 347225
CA 1 798585
3 890850
5 454423
CO 1 819975
3 202969
5 614011
WA 2 163942
4 369858
6 959285
我似乎无法弄清楚如何“达到” state
水平 groupby
总计 sales
state
计算分数。
原文由 erikcw 发布,翻译遵循 CC BY-SA 4.0 许可协议
2022 年 3 月更新
caner 使用
transform
的 这个答案 看起来比我原来的答案好得多!感谢 Paul Rougieux 发表的 评论。
原始答案(2014)
Paul H 的回答 是正确的,您将不得不创建第二个
groupby
对象,但您可以以更简单的方式计算百分比 --- 只需groupby
state_office
并将sales
列除以其总和。复制 Paul H 答案的开头:回报: