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

如何在Polars DataFrame中创建非字母序的有序分类列?

问题:在Polars中创建带自定义顺序的有序分类列

在Pandas中,我们可以通过指定自定义类别顺序和ordered=True参数,直接将字符串列转换为有序分类列:

column_values_with_custom_order = ["B", "A", "C"]
df["Column"] = pd.Categorical(df.Column, categories=column_values_with_custom_order, ordered=True)

但在Polars中,直接使用col("Column").cast(pl.Categorical)无法设置自定义排序规则;虽然通过pl.from_pandas(df)能间接实现类似效果,但希望找到Polars原生的推荐实现方式,且不想为排序额外新增列。


解决方案

Polars原生支持通过set_categories()结合with_ordering()实现带自定义顺序的有序分类列,无需额外新增列,具体实现如下:

示例代码

import polars as pl

# 构造示例DataFrame
polars_df = pl.DataFrame({"Column": ["A", "B", "C", "A", "B"]})

# 定义自定义类别顺序
custom_category_order = ["B", "A", "C"]

# 将字符串列转换为带自定义顺序的有序分类列
polars_df = polars_df.with_columns(
    pl.col("Column")
    .cast(pl.Categorical)
    .set_categories(custom_category_order)
    .with_ordering("physical")
)

# 验证排序效果(会按["B", "A", "C"]的顺序排列)
print(polars_df.sort("Column"))

关键方法说明

  • set_categories(custom_category_order):指定分类的自定义顺序,默认会过滤掉不在该列表中的值;如果需要保留所有原始值,可添加参数strict=False。
  • with_ordering("physical"):将分类的排序规则从默认的字典序(lexical)切换为物理序(physical),让Polars使用你定义的类别顺序作为排序依据。

验证分类属性

可以通过以下代码确认分类的顺序和排序规则:

print("自定义类别顺序:", polars_df.schema["Column"].categories)
print("排序规则:", polars_df.schema["Column"].ordering)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:20:26