如何按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
相关产品推荐
相关产品推荐

