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

如何将标签列表映射为布尔列?Polars实现方案及效率问询

回答

首先,你当前的代码能实现需求,但算不上最优方案——尤其是当标签数量变化时,硬编码每个str.contains表达式会增加维护成本,不够灵活。更优的做法是动态生成布尔列表达式,无需手动逐个编写:

# 获取所有唯一标签
unique_labels = df.select(pl.col("labels").unique()).to_series().to_list()

# 动态生成每个标签对应的布尔列表达式
bool_columns = [
    pl.col("labels").str.contains(label, literal=True).alias(label)
    for label in unique_labels
]

# 生成结果表
out = df.select(bool_columns)

这种方式会自动适配标签数量的变化,不用每次新增/删除标签都修改代码。

关于categorical类型的效率问题:
如果labels是带字符串缓存的categorical类型,且唯一标签数远少于行数,你的实现具备合理且高效的性能。原因在于:

  • Categorical列底层用整数映射存储唯一字符串,Polars会先对少量的唯一类别值执行字符串匹配检查,再将结果广播到整个列,避免了对每一行重复执行相同的字符串操作,相比普通字符串列能节省大量计算资源。
  • 加上literal=True参数,Polars会将匹配字符串视为字面量,进一步优化正则匹配的性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:39:54