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

Pandas按列groupby时保留原有顺序、按Drivetime升序输出分组结果如何实现?

问题原因

pandas groupby 方法默认开启 sort=True 参数,会自动对分组键按字典序升序排列,因此你提前对原DataFrame做的Drivetime排序逻辑会被覆盖,导致结果默认按OD的字母顺序输出。

解决方法

方法1:关闭groupby自动排序(最简便)

你已经提前将原DataFrame按Orig、Drivetime升序排好序,只需要在groupby时添加sort=False参数,分组就会按照数据中OD对第一次出现的顺序排列,不会打乱原有顺序:

import pandas as pd

# 创建测试DataFrame
df = pd.DataFrame({'Orig': ['A', 'A', 'A', 'B', 'C'] ,
                   'Dest': ['A1', 'A1', 'B1', 'B2','C1'] ,
                   'Qty': [100, 200, 300, 400, 500],
                   'Drivetime':[4,4,1,3,5]})

# 先按要求排序
df.sort_values(by =['Orig', 'Drivetime'], inplace=True)

# 关闭groupby默认排序,按原有顺序分组聚合
total_qty_per_orig = df.groupby(['Orig', 'Dest'], sort=False).agg({'Qty': 'sum'})

输出结果顺序符合要求:A-B1(Qty=300)排在A-A1(Qty=300)之前。

方法2:聚合后重新排序(更稳妥)

如果存在同一个OD对的Drivetime值不一致的情况,可以在聚合时保留Drivetime字段,聚合完成后再按规则排序,避免数据异常导致顺序错误:

total_qty_per_orig = df.groupby(['Orig', 'Dest'], as_index=False).agg(
    Qty = ('Qty', 'sum'),
    Drivetime = ('Drivetime', 'min') # 同一个OD对取最小/最大/任意值均可
).sort_values(by=['Orig', 'Drivetime']).set_index(['Orig', 'Dest'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:54:03