熊猫占groupby总数的百分比

这显然很简单,但作为一个新手,我被卡住了

我有一个CSV文件,其中包含3列:州、办公室ID和该办公室的销售额

我想计算给定州每个办公室的销售额百分比(每个州所有百分比的总和为100%)

df=pd.DataFrame({'state':['CA','WA','CO','AZ']*3,
“办公室id”:范围(1,7)*2,
“销售”:[np.random.randint(100000,999999)
适用于范围(12)]内的uu)
df.groupby(['state','office_id']).agg({'sales':'sum'})

这将返回:

销售
州政府办公室
亚利桑那州2839507
4          373917
6          347225
加州1798585
3          890850
5          454423
一氧化碳1819975
3          202969
5          614011
西澳2 163942
4          369858
6          959285

我似乎不知道如何“达到”到groupby状态级别,以合计整个状态的销售额,计算分数

Paul H的答案是正确的,您必须创建第二个groupby对象,但您可以用一种更简单的方法计算百分比——只需groupby州办公室并将sales列除以其总和即可。复制Paul H答案的开头:

来自Paul H
将numpy作为np导入
作为pd进口熊猫
np.random.seed(0)
df=pd.DataFrame({'state':['CA','WA','CO','AZ']*3,
“办公室id”:列表(范围(1,7))*2,
“销售”:[np.random.randint(100000,999999)
适用于范围(12)]内的uu)
state\u office=df.groupby(['state','office\u id']).agg({'sales':'sum'})
#更改:按州办公室分组并除以和
state\u pcts=state\u office.groupby(级别=0)。应用(lambda x:
100*x/浮点数(x.sum())

返回:

销售
州政府办公室
AZ 2 16.981365
4          19.250033
6          63.768601
约119331879
3          33.858747
5          46.809373
CO 1 36.851857
3          19.874290
5          43.273852
西澳2 34.707233
4          35.511259
6          29.781508

发表评论