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

如何使用pandas对DataFrame按group和interval同时升序排序?

解决方案

你可以通过在sort_values方法中同时指定多个排序字段,并为每个字段设置对应的排序规则,直接实现先按group升序、再按interval升序的组合排序,无需分步执行。

实现代码

import pandas as pd

data = {
    'group': ['2', '1', '2', '2', '2', '1'],
    'interval': ['20-30', '20-30', '30-40', '10-20', '10-20', '0-10'],
    'count': [3, 4, 2, 7, 5, 1],
}
df = pd.DataFrame(data)

# 组合排序:先按group升序,再按interval升序
result_df = df.sort_values(
    by=['group', 'interval'],
    key=lambda s: s.astype(int) if s.name == 'group' else s.str.split('-').str[0].astype(int),
    ascending=True
).reset_index(drop=True)

print(result_df)

输出结果

group interval  count
0     1     0-10      1
1     1    20-30      4
2     2    10-20      7
3     2    10-20      5
4     2    20-30      3
5     2    30-40      2

关键说明

  • by=['group', 'interval']:明确排序优先级,先按group排序,同一group内再按interval排序
  • key参数:针对不同字段设置排序逻辑:
    • group字段:将字符串转为整数,避免字符串字典序排序的问题(比如'10'会排在'2'前面)
    • interval字段:按-分割字符串,取区间起始值转为整数排序,保证区间按数值顺序排列(而非字符串字典序)
  • ascending=True:所有字段均采用升序排序,这是默认值,可省略

关于分步排序的问题

你之前的分步排序代码会先按group排序,然后再按interval重新全局排序,这会覆盖掉之前的group分组排序结果,最终只能得到interval单独排序的结果,无法实现你需要的组合排序效果。而同时指定多个字段排序时,Pandas会在第一个字段的分组内进行二次排序,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:27:23