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

如何基于pd.cut生成的温度范围列对DataFrame排序?

问题:提取温度范围最小值并按指定顺序排序

我有一个大型DataFrame,已通过pd.cut创建温度范围列temp_range,需要提取该列的最小值并以此对DataFrame排序。当前提取最小值的代码存在问题,结果不符合预期,需修正后实现按'-60-50'、'-10-0'、'0-10'、'20-30'的顺序排序。

错误代码及结果

错误示例代码

# 目标:按'temp_range'列排序,顺序为'-60-50','-10-0','0-10','20-30'
xdf = pd.DataFrame(data={'temp_range':['-10-0','20-30','-60-50','0-10']})
xdf['Min. temp range']= xdf['temp_range'].apply(lambda x:x[:3])
xdf

当前错误结果

temp_rangeMin. temp range
-10-0-10
20-3020-
-60-50-60
0-100-1

期望结果及排序效果

期望的最小值提取结果

temp_rangeMin. temp range
-10-0-10
20-3020
-60-50-60
0-100

目标排序效果

排序后DataFrame应呈现以下顺序:

temp_rangeMin. temp range
-60-50-60
-10-0-10
0-100
20-3020

修正方案

原代码用x[:3]固定截取前3个字符,无法适配不同长度的温度范围字符串(如正数区间20-30、0-10)。推荐使用正则表达式提取左侧边界数字,这种方法更通用,能兼容负数和正数区间:

修正后的代码

import pandas as pd

xdf = pd.DataFrame(data={'temp_range':['-10-0','20-30','-60-50','0-10']})
# 用正则提取开头的整数(包含负号),并转为数值类型
xdf['Min. temp range'] = xdf['temp_range'].str.extract(r'^(-?\d+)').astype(int)
# 按最小值列排序
xdf_sorted = xdf.sort_values('Min. temp range')
print(xdf_sorted)

代码说明

  • str.extract(r'^(-?\d+)'):正则表达式匹配字符串开头的整数,-?表示可选的负号,\d+表示一个或多个数字,确保准确提取温度范围的最小值。
  • astype(int):将提取的字符串转为整数类型,保证排序时按数值大小而非字符串字典序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:48:13