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

如何按分箱列对Pandas DataFrame进行升序排序?

Pandas按区间列升序排序解决方案

问题场景

现有如下Pandas DataFrame,col1列是字符串格式的数值区间,需要按区间的逻辑顺序(从小到大)对DataFrame进行升序排序:

import pandas as pd
ds = {'col1' : ['(-9999999, 550.0]','(13700.0, 23700.0]','(23700.0, 414580.0]','(4000.0, 8000.0]','(414580.0, 9999999]','(550.0, 4000.0]','(8000.0, 13700.0]'],                                                                                                                              'col2' : [905317.3,   606156.5,   586349.6,   665779.1,   0,  803824.4,   628475.2]}
df = pd.DataFrame(data=ds)

直接使用df.sort_values('col1')会按字符串字典序排序,得到错误的区间顺序,需要实现按区间的逻辑升序排列。

解决方案

方法1:通过临时列提取边界排序

提取每个区间的左边界数值作为排序依据,完成排序后删除临时列:

# 提取区间左边界
df['left_bound'] = df['col1'].apply(lambda x: float(x.split(',')[0].strip('(')))
# 按左边界升序排序,重置索引
sorted_df = df.sort_values('left_bound').drop('left_bound', axis=1).reset_index(drop=True)

print(sorted_df)

方法2:直接使用sort_values的key参数(更简洁)

无需创建临时列,直接在排序时指定处理逻辑:

sorted_df = df.sort_values(
    by='col1',
    key=lambda x: x.apply(lambda s: float(s.split(',')[0].strip('(')))
).reset_index(drop=True)

print(sorted_df)

运行结果

两种方法都会得到符合预期的排序结果:

col1      col2
0    (-9999999, 550.0]  905317.3
1      (550.0, 4000.0]  803824.4
2     (4000.0, 8000.0]  665779.1
3    (8000.0, 13700.0]  628475.2
4   (13700.0, 23700.0]  606156.5
5  (23700.0, 414580.0]  586349.6
6  (414580.0, 9999999]       0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:28:09