是否有更优化的方法来检查列表 dtype 列中的元素是否在另一个输入列表中?
import polars as pl
df = pl.DataFrame(
{"sets": [[1, 2, 3], [1, 2], [9, 10]]}
)
df.with_columns(
(
pl.col("sets").list.set_intersection([1,7]).list.len() != 0
).alias("check")
)
shape: (3, 2)
┌───────────┬───────┐
│ sets ┆ check │
│ --- ┆ --- │
│ list[i64] ┆ bool │
╞═══════════╪═══════╡
│ [1, 2, 3] ┆ true │
│ [1, 2] ┆ true │
│ [9, 10] ┆ false │
└───────────┴───────┘
您提供的代码片段对我来说看起来像惯用的极坐标。另一种方法可能是评估每个列表中的每个元素是否包含在
[1, 7]
中,然后使用 pl.Expr.list.any
。
df.with_columns(
pl.col("sets").list.eval(pl.element().is_in([1, 7])).list.any().alias("check")
)
shape: (3, 2)
┌───────────┬───────┐
│ sets ┆ check │
│ --- ┆ --- │
│ list[i64] ┆ bool │
╞═══════════╪═══════╡
│ [1, 2, 3] ┆ true │
│ [1, 2] ┆ true │
│ [9, 10] ┆ false │
└───────────┴───────┘
pl.Expr.list.set_intersection
稍快一些。不过,如果 DataFrame 不是很大,则可能纯粹根据可读性做出决定。