1

我试图弄清楚如何在我的多索引的最外层求和。因此,我想根据各个运营商以及为其列出的所有商店对 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 所以我认为这可能是问题所在,并转换为浮点数,但这并没有解决问题。这是所需的输出:

                      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

(这只是计算每个商店相对于运营商的百分比的一个垫脚石,即最终的最终输出将是):

                      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

因此,如果您还包括最后一步,则可以加分!!请帮我!!!

4

1 回答 1

1

分组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
于 2021-06-25T20:53:26.440 回答