给定一个具有分类列的 DataFrame:
import polars as pl
df = pl.DataFrame({
"id": ["a", "a", "a", "b", "b", "b", "b"],
"value": [1,1,1,6,6,6,6],
})
res = df.with_columns(bucket = pl.col.value.cut([1,3]))
shape: (7, 3)
┌─────┬───────┬───────────┐
│ id ┆ value ┆ bucket │
│ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ cat │
╞═════╪═══════╪═══════════╡
│ a ┆ 1 ┆ (-inf, 1] │
│ a ┆ 1 ┆ (-inf, 1] │
│ a ┆ 1 ┆ (-inf, 1] │
│ b ┆ 6 ┆ (3, inf] │
│ b ┆ 6 ┆ (3, inf] │
│ b ┆ 6 ┆ (3, inf] │
│ b ┆ 6 ┆ (3, inf] │
└─────┴───────┴───────────┘
如何获取分类列的所有潜在值?我可以用字符串获取它们pl.Expr.cat.get_categories()
吗?
res.select(pl.col.bucket.cat.get_categories())
shape: (3, 1)
┌───────────┐
│ bucket │
│ --- │
│ str │
╞═══════════╡
│ (-inf, 1] │
│ (1, 3] │
│ (3, inf] │
└───────────┘
我还可以通过以下方式获取所有现有值的物理表示形式pl.Expr.to_physical()
res.select(pl.col.bucket.to_physical())
shape: (7, 1)
┌────────┐
│ bucket │
│ --- │
│ u32 │
╞════════╡
│ 0 │
│ 0 │
│ 0 │
│ 2 │
│ 2 │
│ 2 │
│ 2 │
└────────┘
但是我如何才能获得所有潜在值的物理表示呢?我期望输出如下:
shape: (3, 1)
┌────────┐
│ bucket │
│ --- │
│ u32 │
╞════════╡
│ 0 │
│ 1 │
│ 2 │
└────────┘
或者我应该假设它总是被编码为没有间隙的整数范围?
我没有看到任何直接的方法。但是,你可以像下面这样组合
pl.Expr.cat.get_categories
和pl.Expr.to_physical
。这里,如果能实现就好了
pl.Expr.meta.dtype
,res
可以避免再次进行这样的访问。