如何在Pandas中按院校分组并按最新入学年份排序数据
Pandas实现按院校最新入学年份排序分组,组内降序排列
要实现你需要的排序效果,核心是先给每个院校标记它的最新入学年份,再以此为依据确定院校分组的先后顺序,同时组内按入学年份降序排列。以下是具体步骤和代码:
步骤1:构造示例数据集
先还原你提供的数据集:
import pandas as pd data = { 'Name': ['Mary', 'Joe', 'Bill', 'Louise', 'Michael', 'Penny', 'Harry'], 'College': ['Princeton', 'Harvard', 'Princeton', 'Princeton', 'Harvard', 'Yale', 'Yale'], 'Year': [2017, 2018, 2016, 2020, 2019, 2018, 2015] } df = pd.DataFrame(data)
步骤2:添加院校最新入学年份辅助列
通过groupby+transform计算每个院校的最新入学年份,并映射到原数据的每一行:
df['College_Latest_Year'] = df.groupby('College')['Year'].transform('max')
transform的作用是将分组计算的结果(每个学院的最大入学年份)对应到该学院的所有行,这样每一行都能获取所属学院的最新年份信息。
步骤3:多条件排序
按以下优先级排序:
- 院校最新入学年份(降序,确定分组顺序)
- 院校名称(升序,确保同院校的行聚合在一起)
- 学生入学年份(降序,组内排序)
sorted_df = df.sort_values( by=['College_Latest_Year', 'College', 'Year'], ascending=[False, True, False] )
步骤4:清理辅助列(可选)
如果不需要保留辅助列,可删除并重置索引:
sorted_df = sorted_df.drop('College_Latest_Year', axis=1).reset_index(drop=True)
最终得到的sorted_df就是你预期的结果:
| Name | College | Year | |
|---|---|---|---|
| 0 | Louise | Princeton | 2020 |
| 1 | Mary | Princeton | 2017 |
| 2 | Bill | Princeton | 2016 |
| 3 | Michael | Harvard | 2019 |
| 4 | Joe | Harvard | 2018 |
| 5 | Penny | Yale | 2018 |
| 6 | Harry | Yale | 2015 |
内容的提问来源于stack exchange,提问作者Mackenzie
相关产品推荐
相关产品推荐

