如何按照我想要的方式对 pandas 数据框中的元素进行排序和分组?

问题描述 投票:0回答:1

例如,我创建一个 pandas 数据框:

data = [['nick', 3, '2023/11/22 10:05:00', 'A'], ['tom', 3, '2023/11/22 9:25:00','A'], ['juli', 2, '2023/11/22 12:05:00', 'B'], ['ewa', 4, '2023/11/22 9:55:00', 'B'],['peter', 5, '2023/11/22 11:00:00', 'A'], ['johan', 5, '2023/11/22 9:00:00', 'C']]
col_name = ['name', 'score', 'time', 'category'] 
df = df = pd.DataFrame(data, columns=col_name)

有六名来自不同组的学生,他们在一次考试中的成绩不同。我想将来自同一组的学生分组在一起,然后将他们在组中从最高分到最低分进行排序。然后我想将得分最高的组放在数据帧的开头,然后是得分较低的组。如果两个学生成绩相同,则时间早的排在第一位。

我尝试了代码:

df_sorted=df.sort_values(['group','score'],ascending=False).groupby('group').apply(lambda x: x) 

它将学生分组并将他们分在同一组中。我现在拥有的新数据框:

它只部分实现了我需要做的事情。 Peter 的分数高于 Eva 和 Juli,因此 Peter、Nick 和 Tom 应该放在 Johan 的正下方,其次是 Ewa 和 Juli。汤姆应该放在尼克前面,因为时间较早。

接下来我应该做什么才能实现目标?

python pandas dataframe sorting group-by
1个回答
0
投票

您可以使用:

out = (df
   .assign(total=df.groupby('category')['score'].transform('max'))
   .sort_values(by=['total', 'category', 'score', 'time'],
                ascending=[False, True, False, True]
               )
)
© www.soinside.com 2019 - 2024. All rights reserved.