Python-pandas与groupby占总数的百分比
这显然很简单,但是作为一个笨拙的新手,我陷入了困境。
我有一个包含3列的CSV文件,分别是该办公室的州,办公室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'})
返回:
salesstate 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
计算分数。
回答:
你将不得不创建第二个groupby
对象,但是你可以以一种更简单的方式来计算百分比-仅groupby
计算state_office
并将该sales
列除以其和即可。复制Paul H答案的开头:
# From Paul Himport 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()))
返回值:
salesstate 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占总数的百分比 的全部内容, 来源链接: utcz.com/qa/436188.html