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

时间:2018-09-27 05:56:02

标签: python pandas dataframe percentage series

我有以下熊猫系列:

                    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的类别(不是总数的总和)。如果这些很好 百分比仅使用“计数”列计算。

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

        Count
Pclass  
1       216
1       216
2       184
2       184
3       491
3       491

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

80 / 216 * 100 = 37.0%

,然后在计算百分比之后删除重复列。似乎很简单,但我似乎无法使其正常工作。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:4)

使用GroupBy.transform返回5,其大小与原始Series相同,除以div,再除以mul,并在必要时使用round

DataFrame

编辑:

  

您不必向前填写PClass吗?

这不是必需的,因为未显示MultiIndex中的默认值,但是如果将#if input is Series create one column DataFrame df = 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 Percentage Pclass Survived 1 0 80 37.0 1 136 63.0 2 0 97 53.0 1 87 47.0 3 0 372 76.0 1 119 24.0 设置为multi_sparse是可能的,请验证重复值:

False

答案 1 :(得分:3)

divsumlevel=0

df.assign(Pct=df.div(df.sum(level=0), level=0).round(2) * 100)

                 Count   Pct
Pclass Survived             
1      0            80  37.0
       1           136  63.0
2      0            97  53.0
       1            87  47.0
3      0           372  76.0
       1           119  24.0

答案 2 :(得分:0)

您正在处理钛酸数据集。您还可以像下面那样对原始数据(而不是上面的系列)进行操作:

df.Survived.groupby(df.Pclass).value_counts(normalize=True)*100

它将以百分比而不是实际数量为您提供每个班级的计数。