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

如何按Polars中Categorical列开头的子串数值排序数据框?

Polars按Categorical列开头数值排序的简便方法

可以通过提取Steps列开头的数值子串并转换为整数,以此作为排序键实现需求:

import polars as pl

df = pl.from_repr("""
┌─────────────────────────────────┬─────────┐
│ Steps                           ┆ UserIds │
│ ---                             ┆ ---     │
│ cat                             ┆ i64     │
╞═════════════════════════════════╪═════════╡
│ 2-Informa localizacao e CPF     ┆ 229889  │
│ 1-Onboarding + Escolhe Segmento ┆ 383133  │
│ 6-Define metodo de pagamento    ┆ 37520   │
│ 10-Omg Hello                    ┆ 12345   │
│ 3-Escolhe plano                 ┆ 95487   │
│ 4-Realiza cadastro              ┆ 46027   │
└─────────────────────────────────┴─────────┘
""")

# 按Steps开头的数值排序
sorted_df = df.sort(
    pl.col("Steps").str.extract(r"^(\d+)").cast(pl.Int64),
    ascending=True
)

# 验证结果
expected = pl.from_repr("""
┌─────────────────────────────────┬─────────┐
│ Steps                           ┆ UserIds │
│ ---                             ┆ ---     │
│ cat                             ┆ i64     │
╞═════════════════════════════════╪═════════╡
│ 1-Onboarding + Escolhe Segmento ┆ 383133  │
│ 2-Informa localizacao e CPF     ┆ 229889  │
│ 3-Escolhe plano                 ┆ 95487   │
│ 4-Realiza cadastro              ┆ 46027   │
│ 6-Define metodo de pagamento    ┆ 37520   │
│ 10-Omg Hello                    ┆ 12345   │
└─────────────────────────────────┴─────────┘
""")

print(sorted_df.equals(expected))  # 输出: True

关键说明

  • str.extract(r"^(\d+)"):用正则表达式匹配Steps字段开头的连续数字部分
  • cast(pl.Int64):将提取到的字符串数字转换为整数,确保排序是数值顺序而非字符串字典序(避免"10"排在"2"前面的问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:06:18