获取基于另一列但具有不同类别的列的百分比

我有以下熊猫系列:


                    Count

Pclass  Survived    

1       0            80

        1           136

2       0            97

        1            87

3       0           372

        1           119

但我想要这样的东西:


                    Count   Percentage

Pclass  Survived       

1       0           80      37.0

        1           136     63.0

2       0           97      52.7

        1           87      47.3

3       0           372     75.8

        1           119     24.2

我想仅根据 Pclass 的每个类别中的计数(而不是计数的总和)来计算百分比。如果仅使用 Count 列计算这些百分比,那就太好了。


到目前为止,我所做的是根据 Pclass 总结计数并使用 .repeat() 复制值并尝试将其连接到原始系列,但失败了。


        Count

Pclass  

1       216

1       216

2       184

2       184

3       491

3       491

我的想法是使用这个重复列作为计算百分比的分母,如下所示:


80 / 216 * 100 = 37.0%

然后在计算百分比后删除重复列。看起来很简单,但我似乎无法让它发挥作用。任何帮助表示赞赏。


MMMHUHU
浏览 179回答 3
3回答

慕工程0101907

div并sum与level=0df.assign(Pct=df.div(df.sum(level=0), level=0).round(2) * 100)                 Count   PctPclass Survived             1      0            80  37.0       1           136  63.02      0            97  53.0       1            87  47.03      0           372  76.0       1           119  24.0

慕无忌1623718

使用GroupBy.transform退货Series与相同尺寸的原DataFrame,通过分频div,多用mul,如有必要round:#if input is Series create one column DataFramedf = s.to_frame('Count')s = df.groupby('Pclass')['Count'].transform('sum')#if use oldier pandas version#s = df.groupby(level='Pclass')['Count'].transform('sum')df['Percentage'] = df['Count'].div(s).mul(100).round()print (df)                 Count  PercentagePclass Survived                   1      0            80        37.0       1           136        63.02      0            97        53.0       1            87        47.03      0           372        76.0       1           119        24.0编辑:您不必在 PClass 上转发填充吗?这是没有必要的,因为在多指标默认中未示出,但如果设定multi_sparse到False能够验证重复值:with pd.option_context('display.multi_sparse', False):    print (df)                 CountPclass Survived       1      0            801      1           1362      0            972      1            873      0           3723      1           119

红糖糍粑

您正在处理泰坦尼克号数据集。您还可以对原始数据(而不是上面的系列)执行以下操作:df.Survived.groupby(df.Pclass).value_counts(normalize=True)*100它将以百分比而不是实际数量为您提供每个班级的计数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python