我有一个这种形式的数据框。
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
...
我想按Type
和Major
对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]
但是这样做会对两种类型进行排序 - 而不是分别对每种类型进行排序。
感谢您的帮助。
答案 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