按多列分组并对数据框中的值进行排序

3

我有一个数据框,格式如下。

 Type  Major   GPA   
  F      A     2.6   
  T      B     3.4   
  T      C     2.9   
  F      A     1.8   
  T      B     2.8   
  F      C     3.5 
 ...

我希望按照TypeMajor对数据框("students")进行分组,统计每个分组的行数,然后将每个类型中最受欢迎的专业从高到低排序,最后创建一个新的数据框,包括前20个最受欢迎的专业。

我希望输出结果如下:

F   
A 21  
B 19  
C 15
...
T  
A 14  
B 7  
C 3   

这是我所做的事情:
most_popular = students.groupby(['Type', 'Major']).size().sort_values(ascending=False)[:20]

但是这样做会同时对两种类型进行排序,而不是分别排序。

感谢您的帮助。

2个回答

1
most_popular = students.groupby(['Type', 'Major']).size().reset_index().sort_values(['Type', 'Major'], ascending=[True, False])[:20]

关键是要按照ASC和DSC顺序排序,您可以使用以下代码:
.sort_values(['Type', 'Major'], ascending=[True, False])

0

结果会自动按默认参数排序。这是否是您想要的输出?

>>> df.groupby(['Type', 'Major'], as_index=False).GPA.count().sort_values(['Major', 'GPA'])
  Type Major  GPA
0    F     A    2
2    T     B    2
1    F     C    1
3    T     C    1

很遗憾,它按专业字母顺序排序结果,而不是按GPA排序。 - James Eaves

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接