熊猫:grouby和sort(升序和降序混合)

时间:2020-05-16 15:12:13

标签: python pandas dataframe

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

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

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

1 个答案:

答案 0 :(得分:0)

尝试一下:

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

df.sort_values(by=['mean_score'])