Python中pandas DataFrame按列分组后如何在组内按指定列排序
你原来的代码仅生成了GroupBy分组对象,没有执行组内排序、重置次级索引的后续处理逻辑,因此无法得到目标结果。
正确实现代码
import pandas as pd # 核心实现逻辑 result = df.groupby('Category', sort=False, group_keys=False) \ .apply(lambda group: group.sort_values('Value1', ascending=True).reset_index(drop=True))
参数说明
sort=False:禁止pandas对分组键Category默认排序,保证外层Category的原有顺序不变group_keys=False:避免额外生成分组键层级的索引,保持原有索引结构- 组内执行
sort_values('Value1')完成升序排序后,调用reset_index(drop=True)删除原次级索引,重新生成0/1/2的连续次级索引,刚好匹配你需要的「次级索引0对应最小Value1、索引2对应最大Value1」的要求。
如果你的原数据已经把索引重置为普通列,也可以用下面的写法实现:
result = df.reset_index() \ .sort_values(['Category', 'Value1'], ascending=[True, True]) \ .assign(second_index=lambda x: x.groupby('Category').cumcount()) \ .set_index(['Category', 'second_index'])
内容的提问来源于stack exchange,提问作者LostinSpatialAnalysis
相关产品推荐
相关产品推荐

