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'})

返回:

                  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计算分数。

回答:

你将不得不创建第二个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占总数的百分比 的全部内容, 来源链接: utcz.com/qa/436188.html

回到顶部