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

如何在Polars中不依赖map_elements高效创建B_in_A列?

不依赖map_elements实现B_in_A列的可扩展方法

当然有,Polars提供了多种向量化字符串操作来替代逐行的map_elements,这些方法效率更高、代码更简洁,也更具可扩展性。以下是两种常用方案:

方案1:使用str.contains(推荐)

str.contains支持直接将另一列作为匹配模式,完全是向量化操作,性能远优于逐行处理:

import polars as pl

df = pl.DataFrame({"A":["foo","bar","foo"],"B":["f","b","s"]})

df = df.with_columns(
    pl.col("A").str.contains(pl.col("B")).alias("B_in_A")
)
print(df)

方案2:使用str.find判断匹配位置

str.find会返回子串的起始索引,若未找到则返回-1,通过判断索引是否不等于-1来得到布尔结果:

import polars as pl

df = pl.DataFrame({"A":["foo","bar","foo"],"B":["f","b","s"]})

df = df.with_columns(
    (pl.col("A").str.find(pl.col("B")) != -1).alias("B_in_A")
)
print(df)

以上两种方案都能得到和原代码完全一致的输出:

shape: (3, 3)
┌─────┬─────┬────────┐
│ A   ┆ B   ┆ B_in_A │
│ --- ┆ --- ┆ ---    │
│ str ┆ str ┆ bool   │
╞═════╪═════╪════════╡
│ foo ┆ f   ┆ true   │
│ bar ┆ b   ┆ true   │
│ foo ┆ s   ┆ false  │
└─────┴─────┴────────┘

为什么这些方法更优?

  • 向量化执行:Polars会对整列数据批量处理,比map_elements的逐行循环快几个数量级,尤其适合大数据集。
  • 代码简洁:无需定义lambda函数,逻辑一目了然。
  • 可扩展性强:可以轻松结合其他Polars操作(如过滤、分组),无需修改逐行处理的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:47:41