如何在pandas中按分组id分组后对组内行按order字段排序
Pandas 按组内指定字段排序实现方法
实现该需求有两种常用方式,优先推荐第一种多字段直接排序的方案,性能更高:
方法1:sort_values 多字段直接排序
直接指定两个排序字段,先按id分组排序,再在同分组内按order升序排列即可:
# 核心代码,ascending参数可按需调整排序方向 df_sorted = df.sort_values(by=['id', 'order'], ascending=[True, True]).reset_index(drop=True)
方法2:分组后组内排序
如果需要在分组后做更多自定义操作,可以用groupby + apply的写法:
# group_keys=False避免生成额外的分组索引层级 df_sorted = df.groupby('id', group_keys=False).apply(lambda x: x.sort_values('order')).reset_index(drop=True)
完整测试代码
你可以直接运行以下代码验证结果:
import pandas as pd # 构造示例数据 data = { 'id': [2, 2, 2, 3, 3], 'title': ['A', 'B', 'C', 'H', 'T'], 'order': [2, 1, 3, 2, 1] } df = pd.DataFrame(data) # 方法1排序 df_sorted = df.sort_values(by=['id', 'order'], ascending=True).reset_index(drop=True) print(df_sorted)
运行后输出结果如下,和预期一致:
id title order 0 2 B 1 1 2 A 2 2 2 C 3 3 3 T 1 4 3 H 2
内容的提问来源于stack exchange,提问作者user15649753
相关产品推荐
相关产品推荐

