Polars-python:检查另一个列表中列表列元素是否存在的最佳方法

问题描述 投票:0回答:1

是否有更优化的方法来检查列表 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 │
└───────────┴───────┘
python-polars
1个回答
0
投票

您提供的代码片段对我来说看起来像惯用的极坐标。另一种方法可能是评估每个列表中的每个元素是否包含在

[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 不是很大,则可能纯粹根据可读性做出决定。

© www.soinside.com 2019 - 2024. All rights reserved.