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

标签 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(“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]

但这样做是对两种类型进行排序 - 而不是分别对每种类型进行排序。

感谢您的帮助。

最佳答案

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])

关于python - 对按多列分组的数据框中的值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36877811/

相关文章:

python - Pandas 加入/合并/合并两个数据帧

python-2.7 - Pandas 0.18.1 groupby 和重采样多级聚合错误

python - 如何扩展 pyWavelets 以处理 N 维数据?

python - BeautifulSoup 查找多个类别

xslt - 在传递给xsl :for-each之前对节点集进行排序

java - 试图在数组中找到最小值

python - 时间序列脑电图重采样可以修复电压分辨率差的问题?

python - 在 Django 翻译 (.po) 文件中指定版权和作者

python - 无法从网页解析 "First name"

java - 依赖排序算法