【问题标题】:Pandas: grouby and sort (ascending and descending mixed)Pandas:groupby 和 sort(升序和降序混合)
【发布时间】:2020-09-02 10:37:28
【问题描述】:

我们如何根据一列对数据框进行分组,根据另一列生成值(例如平均值)并最终对这些值进行排序,以便整体分组根据平均值排序(降序)并在根据平均值排序的组内(降序)但是对于基于第一个按列分组的字母顺序(升序)的相等值? 例如:假设我们有一个包含参与者姓名和他们在不同活动中得分的数据框。我想首先按参与者姓名分组,生成分数的平均值。根据平均值对该组进行降序排序。对于平均值相等的情况,按名称升序排序。

DF: name task score User1 task1 3 User2 task2 8 User3 task3 7 User4 task4 7 User5 task5 8 User6 task6 8 User7 task7 2 User8 task8 7 User9 task9 6 User10 task10 1 User1 task11 5 User2 task12 7 User3 task13 1 User4 task14 8 User5 task15 0 User6 task16 2 User7 task17 8 User8 task18 1 User9 task19 3 User10 task20 4

Out: Name mean_score User2 7.5 User4 7.5 User6 5 User7 5 User9 4.5 User1 4 User3 4 User5 4 User8 4 User10 2.5

注意:生成的平均分数按降序排序,对于相同的值用户名按字母升序排序

我的代码:

top = df_tasks.groupby(['name'],as_index=False)['score'].mean().sort_values(by=['score'],axis=0,ascending=False,inplace=False)

给我以下:

name mean_score User2 7.5 User4 7.5 User7 5 User6 5 User9 4.5 User8 4 User3 4 User1 4 User5 4 User10 2.5

按名称排序此输出会影响基于分数的排序。我做错了什么?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    试试这个:

    df['mean_score'] = df.groupby('name').score.mean().reset_index(drop=True)
    
    df.sort_values(by=['mean_score'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-09
      • 2018-11-20
      • 2020-10-11
      • 1970-01-01
      • 2012-11-08
      • 2023-03-07
      • 2016-03-03
      • 1970-01-01
      相关资源
      最近更新 更多