如何在多索引(行)的最外层求和?

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