You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按Year分组后对DataFrame按Counts列降序排序?

问题

我有如下DataFrame:

Names      Counts  Year
0           Jordan        1043  2000
1            Steve         204  2000
2            Brock           3  2000
3            Steve          33  2000
4             Mike          88  2000
...           ...         ...   ...
20001        Bryce           2  2015
20002        Steve          11  2015
20003        Penny          24  2015
20004        Steve          15  2015
20005        Ryan            5  2015

我希望按Year对数据分组,再按Counts列降序排序,预期输出示例如下:

Names      Counts  Year
0           Jordan        1043  2000
1            Steve         204  2000
2             Mike          88  2000
3            Steve          33  2000
4            Brock           3  2000
...           ...         ...   ...
20001        Penny          24  2015
20002        Steve          15  2015
20003        Steve          11  2015
20004        Ryan            5  2015    
20005        Bryce           2  2015

我已尝试的代码:

df = (df[df['Names'].groupby('Year').sort_values(by=['Counts'], ascending=False)  
解决方案

你写的代码存在两个问题:一是语法不完整(缺少闭合括号),二是逻辑有误——df['Names'].groupby('Year')仅对Names列按年份分组,没法直接基于Counts列做组内排序。

要实现需求,推荐两种方法:

方法一:分组后组内排序

通过groupby结合apply,对每个年份分组的数据单独按Counts降序排列:

df = df.groupby('Year', group_keys=False).apply(lambda x: x.sort_values('Counts', ascending=False))

参数group_keys=False可以避免结果中额外生成分组键的索引层级。

方法二:全局排序(性能更优)

先按Year升序、Counts降序做全局排序,再重置索引,最终效果和分组排序一致,且这种方法不需要对每个分组单独处理,运行效率更高:

df = df.sort_values(['Year', 'Counts'], ascending=[True, False]).reset_index(drop=True)

内容的提问来源于stack exchange,提问作者Rashid Abramov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:15:21