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

如何按字母与数字混合顺序对DataFrame列排序并重索引

错误原因

你原来的代码提取排序键的逻辑完全错误:x[1:]是取列名字符串的第2位到末尾的子串,例如列名Round 1 Position取完是ound 1 Position,无法转为有效数值,自然得不到正确结果。

实现代码

你需要把排序键拆分为两个优先级:第一优先按Round后的数字升序,第二优先按后缀的自定义顺序(Position > Price > Score)排序,代码如下:

# 自定义排序规则
sorted_columns = sorted(
    df.columns,
    key=lambda col: (
        int(col.split()[1]),  # 第一排序键:提取轮次数字转整数,避免字符串排序10排在2前面的问题
        # 第二排序键:给后缀指定权重,保证Position在前,Price中间,Score在后
        {"Position": 0, "Price": 1, "Score": 2}[col.split()[-1]]
    )
)
# 重索引
df = df.reindex(sorted_columns, axis=1)

可选兼容处理

如果你的列名存在不在Position/Price/Score范围内的后缀,可以把第二排序键的字典改为带默认值的写法,避免报错:

key=lambda col: (
    int(col.split()[1]),
    {"Position": 0, "Price": 1, "Score": 2}.get(col.split()[-1], 99)
)

未定义的后缀会统一排在所有标准后缀的后面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:39:03