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

如何在Polars中实现类似pandas from_dummies的独热编码反转功能?

在Polars中反转独热编码(模拟pandas的from_dummies)

Polars目前没有内置的from_dummies方法,但可以通过unpivot+过滤+拆分列名+pivot的组合操作实现反转,具体步骤如下:

1. 准备示例数据

import polars as pl

df = pl.DataFrame({
    "col1_hi": [0,0,0,1,1],
    "col1_med": [0,0,1,0,0],
    "col1_lo": [1,1,0,0,0],
    "col2_yes": [1,1,0,1,0],
    "col2_no": [0,0,1,0,1],
})

2. 链式实现反转操作

result = (
    # 添加行索引,用于后续关联原始行
    df.with_row_index("idx")
    # 宽表转长表:将每个独热列转为行记录
    .unpivot(index="idx", variable_name="col", value_name="val")
    # 只保留独热编码为1的有效记录
    .filter(pl.col("val") == 1)
    # 拆分列名(如col1_hi拆分为原始列名col1和分类值hi)
    .with_columns(pl.col("col").str.split("_", n=1).alias("split_col"))
    # 提取拆分后的原始列名和分类值
    .select(
        "idx",
        orig_col=pl.col("split_col").list.get(0),
        category=pl.col("split_col").list.get(1)
    )
    # 将长表转回宽表,恢复原始分类列结构
    .pivot(index="idx", columns="orig_col", values="category")
    # 移除临时索引列
    .drop("idx")
)

print(result)

3. 输出结果

┌──────┬──────┐
│ col1 ┆ col2 │
│ ---  ┆ ---  │
│ str  ┆ str  │
╞══════╪══════╡
│ lo   ┆ yes  │
│ lo   ┆ yes  │
│ med  ┆ no   │
│ hi   ┆ yes  │
│ hi   ┆ no   │
└──────┴──────┘

关键说明

  • with_row_index:必须添加索引,确保unpivot后能准确对应回原始行,避免分类值错位。
  • str.split("_", n=1):n=1保证只拆分第一个下划线,适配列名格式为原始列名_分类值的场景;如果你的独热列用其他分隔符,替换下划线即可。
  • 整个流程通过链式调用完成,符合Polars的高效处理风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:03:35