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

时间:2016-04-26 23:50:38

标签: python sorting pandas group-by

我有一个这种形式的数据框。

 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对Dataframe(“学生”)进行分组,计算每个分组的行数,然后从每个类型的大多数到最不受欢迎的专业排序,最后,创建一个包含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 个答案:

答案 0 :(得分: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])

答案 1 :(得分: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