如何对DataFrame按相同日期分组后实现值的升序/降序排序?
Pandas按日期分组后组内降序排序实现
需求说明
将DataFrame按相同日期(索引)分组,每组内的数值列(a、b、c)进行降序排序,得到目标输出格式。
示例数据构建
先还原你的示例DataFrame:
import pandas as pd data = { 'a': [2, 3, 5, 6, 7, 8, 9, 10, 11], 'b': [12, 13, 14, 15, 16, 17, 18, 19, 20], 'c': [21, 22, 23, 24, 25, 26, 27, 28, 29] } date_index = ['21-12-30', '21-12-30', '21-12-30', '22-01-30', '22-01-30', '22-01-30', '22-02-28', '22-02-28', '22-02-28'] df = pd.DataFrame(data, index=date_index)
核心实现代码
通过groupby按索引分组,结合apply对每组执行降序排序:
# 按日期索引分组,每组内对所有列降序排序 result = df.groupby(level=0).apply(lambda group: group.sort_values(by=df.columns.tolist(), ascending=False)) # 移除分组产生的多级索引,还原原索引结构 result = result.reset_index(level=0, drop=True)
输出验证
执行后result的结果与你给出的期望输出完全一致:
a b c 21-12-30 5 14 23 21-12-30 3 13 22 21-12-30 2 12 21 22-01-30 8 17 26 22-01-30 7 16 25 22-01-30 6 15 24 22-02-28 11 20 29 22-02-28 10 19 28 22-02-28 9 18 27
补充说明
- 如果日期不是索引而是单独列(如列名
date),只需把groupby(level=0)改为groupby('date')即可。 - 若需要升序排序,将
ascending=False改为ascending=True。
内容的提问来源于stack exchange,提问作者stvlam22
相关产品推荐
相关产品推荐

