如何在多索引(行)的最外层求和?
How do I sum on the outter most level of a multi index (row)?
我想弄清楚如何在我的多索引的最外层求和。所以我想根据各个运算符以及为其列出的所有商店对 COUNTS 列求和。
df=pd.DataFrame(data.groupby('OPERATOR').SHOP.value_counts())
df=df.rename(columns={'SHOP':'COUNTS'})
df['COUNTS'] = df['COUNTS'].astype(float)
df['percentage']=df.groupby(['OPERATOR'])['COUNTS'].sum()
df['percentage']=df.sum(axis=0, level=['OPERATOR', 'SHOP'])
df.head()
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 3.0
FF9 1.0 1.0
IHI 1.0 1.0
Aegean HA9 33.0 33.0
IN9 24.0 24.0
当我使用 df.sum 调用时,它允许我在两个级别上调用它,但是当我将其更改为 df.sum(axis=0, level=['OPERATOR' ],它导致百分比列为 NaN。我最初将计数列作为 int,所以我认为这可能是问题所在,并转换为 float,但这并没有解决问题。这是所需的输出:
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 5.0
FF9 1.0 5.0
IHI 1.0 5.0
Aegean HA9 33.0 57.0
IN9 24.0 57.0
(这只是计算每个商店相对于运营商的百分比的垫脚石,即 FINAL 最终输出将是):
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 .6
FF9 1.0 .2
IHI 1.0 .2
Aegean HA9 33.0 .58
IN9 24.0 .42
所以,如果你也包括最后一步,那么奖励加分!!请帮帮我!!!
按 OPERATOR
分组并规范化您的数据:
df['percentage'] = df.groupby('OPERATOR')['COUNTS'] \
.transform(lambda x: x / x.sum()) \
.round(2)
>>> df
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 0.60
FF9 1.0 0.20
IHI 1.0 0.20
Aegean HA9 33.0 0.58
IN9 24.0 0.42
我想弄清楚如何在我的多索引的最外层求和。所以我想根据各个运算符以及为其列出的所有商店对 COUNTS 列求和。
df=pd.DataFrame(data.groupby('OPERATOR').SHOP.value_counts())
df=df.rename(columns={'SHOP':'COUNTS'})
df['COUNTS'] = df['COUNTS'].astype(float)
df['percentage']=df.groupby(['OPERATOR'])['COUNTS'].sum()
df['percentage']=df.sum(axis=0, level=['OPERATOR', 'SHOP'])
df.head()
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 3.0
FF9 1.0 1.0
IHI 1.0 1.0
Aegean HA9 33.0 33.0
IN9 24.0 24.0
当我使用 df.sum 调用时,它允许我在两个级别上调用它,但是当我将其更改为 df.sum(axis=0, level=['OPERATOR' ],它导致百分比列为 NaN。我最初将计数列作为 int,所以我认为这可能是问题所在,并转换为 float,但这并没有解决问题。这是所需的输出:
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 5.0
FF9 1.0 5.0
IHI 1.0 5.0
Aegean HA9 33.0 57.0
IN9 24.0 57.0
(这只是计算每个商店相对于运营商的百分比的垫脚石,即 FINAL 最终输出将是):
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 .6
FF9 1.0 .2
IHI 1.0 .2
Aegean HA9 33.0 .58
IN9 24.0 .42
所以,如果你也包括最后一步,那么奖励加分!!请帮帮我!!!
按 OPERATOR
分组并规范化您的数据:
df['percentage'] = df.groupby('OPERATOR')['COUNTS'] \
.transform(lambda x: x / x.sum()) \
.round(2)
>>> df
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 0.60
FF9 1.0 0.20
IHI 1.0 0.20
Aegean HA9 33.0 0.58
IN9 24.0 0.42