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

如何让DataFrame列按以字母'l'开头的自定义顺序排序?

按自定义字母顺序对Pandas DataFrame排序(以'l'开头)

问题场景

我有下面这个DataFrame,想按自定义的字母顺序给Doc列排序,要求以字母'l'开头的条目排在最前面,而非默认的从'a'开始:

import pandas as pd

data = [['C:/folder/!!file this', 15], ['C:/folder/apple', 14], ['C:/folder/Land file', 10]]
df = pd.DataFrame(data, columns=['Doc', 'Size'])

想要的排序结果是这样的:

data = [['C:/folder/Land file', 10], ['C:/folder/!!file this', 15], ['C:/folder/apple', 14]]
df_sorted = pd.DataFrame(data, columns=['Doc', 'Size'])

原代码问题分析

  1. 第一段代码报错ValueError: substring not found的原因:
    你自定义的alphabet里没加空格字符,但Doc列里的Land file包含空格,调用alphabet.index(c)查找空格时找不到,直接触发报错。另外,lambda函数里写x[0]是只处理第一个字符串,不是每一行的Doc值,逻辑本身就错了。

  2. 第二段代码没改变顺序的原因:
    sort_index是用来给DataFrame的索引排序的,不是给Doc列的值排序;而且你创建的pd.Categorical根本没和要排序的Doc列关联起来,当然不会有效果。

正确解决方案

第一步:补全自定义字符顺序表

先把Doc列里可能出现的所有字符都加到alphabet里,比如这次要补充空格:

# 把空格加到自定义顺序里,位置按需求调整
alphabet = """lmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijk !"#$%_'()*+,-./:;<=>?@[\]^&`{|}~"""

第二步:用sort_values的key参数生成正确排序键

给每个Doc字符串生成一个排序键——把字符串里每个字符在alphabet中的位置列成列表,Pandas会根据这个列表完成自定义排序:

df_sorted = df.sort_values(by='Doc', key=lambda s: [[alphabet.index(c) for c in string] for string in s])

完整可运行代码

import pandas as pd

data = [['C:/folder/!!file this', 15], ['C:/folder/apple', 14], ['C:/folder/Land file', 10]]
df = pd.DataFrame(data, columns=['Doc', 'Size'])

# 包含所有需用到字符的自定义顺序表(已添加空格)
alphabet = """lmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijk !"#$%_'()*+,-./:;<=>?@[\]^&`{|}~"""

# 按自定义顺序排序
df_sorted = df.sort_values(by='Doc', key=lambda s: [[alphabet.index(c) for c in string] for string in s])

print(df_sorted)

运行后输出的结果就是你想要的:

Doc  Size
2  C:/folder/Land file    10
0  C:/folder/!!file this    15
1   C:/folder/apple    14

小技巧

怕自定义顺序表漏字符的话,可以先提取Doc列里的所有唯一字符,检查有没有遗漏:

# 提取Doc列里的所有唯一字符
all_chars = set(''.join(df['Doc']))
# 对比自定义表,找出没包含的字符
missing_chars = all_chars - set(alphabet)
if missing_chars:
    print(f"自定义顺序表缺了这些字符: {missing_chars}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:30:23