如何对pandas dataframe中的区间值进行排序?
问题核心原因
你遇到的排序失效问题,90%以上的概率是你的区间值列存储的是字符串格式,字符串默认按字典序排序,不会识别数值大小逻辑,其次是忘记接收sort_values的返回值或者未加inplace参数。
解决方法
- 第一种方案:不修改原列类型,拆分临时列排序
先把区间的左右边界拆成数值列,按数值排序后删除临时列即可:# 把示例中的「区间列」替换成你实际的列名 df[['left_bound', 'right_bound']] = df['区间列'].str.split('-', expand=True).astype(float) df = df.sort_values(by=['left_bound', 'right_bound']).drop(columns=['left_bound', 'right_bound']) - 第二种方案:转换为pandas区间类型,后续可直接排序
把列转换为pandas原生的IntervalDtype格式,后续所有排序、比较操作都会按区间数值逻辑生效:import pandas as pd # 拆分边界 df[['l', 'r']] = df['区间列'].str.split('-', expand=True).astype(float) # closed参数可选left/right/both/neither,对应你的区间开闭规则 df['区间列'] = df.apply(lambda x: pd.Interval(x['l'], x['r'], closed='both'), axis=1) df = df.drop(columns=['l','r']) # 后续直接排序即可生效 df = df.sort_values('区间列')
常见注意点
pd.sort_values()默认不会修改原DataFrame,要么加inplace=True参数,要么把排序后的结果赋值给新变量/原变量,否则操作不会生效。
内容的提问来源于stack exchange,提问作者Yana
相关产品推荐
相关产品推荐

