使用 groupby 的 Pandas 占总数的百分比
这显然很简单,但作为一个麻木的新手,我被卡住了。
我有一个 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
以计算分数。
-
2022 年 3 月更新
using这个答案
transform
看起来比我原来的答案好得多!df['sales'] / df.groupby('state')['sales'].transform('sum')
感谢发表的评论。
原始答案(2014)
H的回答是正确的,您将不得不制作第二个
groupby
对象,但您可以以更简单的方式计算百分比
- 只需groupby
将列state_office
除sales
以其总和即可。复制 Paul H 答案的开头:# From Paul H 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, 'sales': [np.random.randint(100000, 999999) for _ in range(12)]}) state_office = df.groupby(['state', 'office_id']).agg({'sales': 'sum'}) # Change: groupby state_office and divide by sum state_pcts = state_office.groupby(level=0).apply(lambda x: 100 * x / float(x.sum()))
回报:
sales state office_id AZ 2 16.981365 4 19.250033 6 63.768601 CA 1 19.331879 3 33.858747 5 46.809373 CO 1 36.851857 3 19.874290 5 43.273852 WA 2 34.707233 4 35.511259 6 29.781508
-
Python-pandas与groupby占总数的百分比
2021-02-02 关注 0 浏览207 1答案
-
如何使用大pandas中的groupby根据另一列中的条件计算百分比总数
2021-01-29 关注 0 浏览66 1答案
-
pandas groupby查找正确和错误的百分比
2021-01-29 关注 0 浏览62 1答案
-
SQL查询以选择占总数的百分比
2021-03-12 关注 0 浏览116 1答案
-
中性粒细胞占血液白细胞总数的百分比
2022-05-15 关注 0 浏览11 1答案
-
熊猫:.groupby()。size()和百分比
2021-01-29 关注 0 浏览75 1答案
-
如何使用Pandas的DataFrame计算百分比
2021-01-29 关注 0 浏览187 1答案
-
计算pandas DataFrame中的行百分比?
2021-01-29 关注 0 浏览117 1答案
-
Oracle:如何通过查询获取总数的百分比?
2021-05-10 关注 0 浏览126 1答案
-
DataFrame分组依据上的pandas百分比计数
2021-01-29 关注 0 浏览104 1答案