这显然很简单,但作为一个新手,我被卡住了
我有一个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