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

如何对1.1与1.1.2这类分层数字格式数据进行排序?

分层数字(如1.1、1.1.2)的排序解决技巧

在数据分析中遇到这类带多级小数点的分层数字,常规排序会把它们当字符串按字符顺序排,导致1.10排在1.2前面,下面是几种实用的解决方法:

Python 处理方案

方法1:用第三方库快速实现

natsort是专门处理自然排序的库,能完美识别分层数字结构:

  • 先安装:pip install natsort
  • 示例代码:
from natsort import natsorted

raw_data = ["1.1", "1.10", "1.1.2", "1.2", "2"]
sorted_data = natsorted(raw_data)
print(sorted_data)
# 输出结果:['1.1', '1.1.2', '1.2', '1.10', '2']

方法2:原生代码实现(无需额外库)

把每个分层数字按.拆分成整数列表,用这个列表作为排序的依据:

raw_data = ["1.1", "1.10", "1.1.2", "1.2", "2"]
sorted_data = sorted(raw_data, key=lambda x: list(map(int, x.split("."))))
print(sorted_data)
# 输出和上面一致

Excel 处理方案

辅助列拆分排序(通用所有版本)

  1. 插入新列(比如B列),在B1单元格输入公式:=TEXTSPLIT(A1, ".")(旧版Excel用=FILTERXML("<t><s>"&SUBSTITUTE(A1,".","</s><s>")&"</s></t>","//s")),按回车后会自动把A列的分层数字拆分成多个单元格
  2. 选中原始数据列(A列)和辅助列(B列及后续拆分出的列),点击「数据」→「排序」
  3. 在排序对话框中,依次添加排序条件:先按拆分后的第一列排序,再按第二列,以此类推,完成后就能得到正确的排序结果

自定义序列排序(适合固定范围数据)

如果你的分层数字范围固定,可直接创建自定义序列:

  1. 点击「文件」→「选项」→「高级」→「编辑自定义列表」
  2. 输入所有分层数字的正确顺序,添加后回到排序界面,选择「自定义序列」作为排序依据即可

SQL 处理方案(以MySQL为例)

通过SUBSTRING_INDEX拆分字符串,转换为整数后按层级排序:

SELECT version_column
FROM your_table
ORDER BY 
  CAST(SUBSTRING_INDEX(version_column, '.', 1) AS UNSIGNED),
  CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(version_column, '.', 2), '.', -1) AS UNSIGNED),
  CAST(SUBSTRING_INDEX(version_column, '.', -1) AS UNSIGNED);

这段代码会依次按第一级、第二级、第三级数字排序,即使部分数据只有两级,也能正常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:40:39