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

如何按指定规则对DataFrame中的字符串数字序列排序?

解决DataFrame中数字序列的自定义排序问题

需求

对DataFrame中的数字字符串序列按照指定的自定义顺序排序。

输入列表

lst = [ '6', '7', '8', '9', '9.1', '10.1', '10.2', '13.1', '13.2',
'14.1',  '14.2', '15.1', '15.2', '16.1', '16.2', '17', '11.1.1',
'11.1.2', '11.2.1', '11.2.2', '12.1.1', '12.1.2', '12.2.1', '12.2.2' ]

期望输出

output = [  '6', '7', '8', '9', '9.1', '10.1', '11.1.1', '12.1.1',
'11.1.2', '12.1.2', '13.1', '14.1', '15.1', '16.1', '10.2', '11.2.1',
'12.2.1', '11.2.2', '12.2.2', '13.2', '14.2', '15.2', '16.2', '17' ]

当前代码问题

原代码仅通过拆分字段做简单排序,未匹配期望的复杂分组规则,无法得到目标结果。

解决方案

通过自定义排序键函数,精准匹配期望的排序逻辑,再基于该键完成排序:

import pandas as pd

lst = [ '6', '7', '8', '9', '9.1', '10.1', '10.2', '13.1', '13.2',
'14.1',  '14.2', '15.1', '15.2', '16.1', '16.2', '17', '11.1.1',
'11.1.2', '11.2.1', '11.2.2', '12.1.1', '12.1.2', '12.2.1', '12.2.2' ]

df = pd.DataFrame(lst)

def get_sort_key(s):
    parts = list(map(int, s.split('.')))
    if len(parts) == 1:
        # 单个数字中17单独放在最后
        if parts[0] == 17:
            return (3, parts[0])
        else:
            return (0, parts[0], 0, 0)
    elif len(parts) == 2:
        first, second = parts
        if second == 1:
            # 第二级为1的元素,按第一级分为<=10和>=13两组排序
            if first <= 10:
                return (0, first, 1, 0)
            else:
                return (0, first, 2, 0)
        else:
            # 第二级为2的元素,10.2优先,其余按第一级升序
            if first == 10:
                return (1, 0, first, second)
            else:
                return (1, 2, first, second)
    else:
        # 三级结构元素,按第二级、第三级、第一级排序
        first, second, third = parts
        if second == 1:
            return (0, first, 1, third)
        else:
            return (1, 1, first, third)

# 生成排序键列
df['sort_key'] = df[0].apply(get_sort_key)
# 按排序键排序
sorted_df = df.sort_values('sort_key')
# 提取最终结果
output = sorted_df[0].tolist()
print(output)

代码说明

  1. get_sort_key函数根据元素的层级结构生成排序元组,元组从左到右优先级依次降低,完美匹配期望的分组排序规则
  2. 通过apply为每个元素生成排序键,再调用sort_values实现精准排序
  3. 最后提取原序列列得到目标输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:43:16