【问题标题】:How to divide 2 aggregated columns using groupby in Pandas?如何在 Pandas 中使用 groupby 划分 2 个聚合列?
【发布时间】:2020-10-17 21:05:17
【问题描述】:

在 Titanic 数据集中,我希望计算每个乘客等级 (Pclass) 1,2 和 3 中幸存的乘客百分比。我想出了如何获得乘客数量和数量。使用 group by 幸存的乘客如下:

train[['PassengerId','Pclass','Survived']]\
    .groupby('Pclass')\
    .agg(PassengerCount=pd.NamedAgg(column='PassengerId', aggfunc='count'), 
         SurvivedPassengerCount=pd.NamedAgg(column='Survived',aggfunc='sum'))

所以,我得到以下输出:

        PassengerCount  SurvivedPassengerCount
Pclass                                        
1                  216                     136
2                  184                      87
3                  491                     119

但是如何获得百分比列?我想要的输出如下:

        PassengerCount  SurvivedPassengerCount  PercSurvived
Pclass                                                             
1                  216                     136                     62.9%
2                  184                      87                     47.3%
3                  491                     119                     24.2%

提前致谢!

【问题讨论】:

  • 将乘客加总为totpassengers,然后创建一个新列df['perc'] = df.passengerconnt/totpassengers
  • @Tarik - 嗨..我想一步完成。另外我不想将此输出保存在数据框中。有没有办法做到这一点?
  • 这可能对你有帮助:stackoverflow.com/questions/40301973/… 虽然我不明白避免额外声明的意义。

标签: python pandas aggregation


【解决方案1】:

由于您只需要将SurvivedPassengerCount 除以PassengerCount,因此您可以使用.assign 方法:

result = train[['PassengerId','Pclass','Survived']]\
            .groupby('Pclass')\
            .agg(PassengerCount=pd.NamedAgg(column='PassengerId', aggfunc='count'), 
                 SurvivedPassengerCount=pd.NamedAgg(column='Survived',aggfunc='sum'))\
    
result = result.assign(PercSurvived=df['PassengerCount']/df['SurvivedPassengerCount'])

【讨论】:

    猜你喜欢
    • 2021-11-07
    • 2020-11-05
    • 1970-01-01
    • 2017-06-22
    • 2019-02-10
    • 2021-11-01
    • 2019-10-12
    • 2017-07-02
    • 2017-07-20
    相关资源
    最近更新 更多