Polars中如何筛选列表列含指定元素的行?(任意/全部)
解决方案
Polars提供了原生的列表操作方法,能高效实现这两种筛选需求,完全不需要手动遍历或展开列表,性能拉满:
1. 筛选包含全部指定元素的行
用list.contains_all()方法,直接判断列表列是否包含目标列表的所有元素:
df_all = df.filter(pl.col("sets").list.contains_all(items)) print(df_all)
输出结果:
shape: (2, 1) ┌───────────┐ │ sets │ │ --- │ │ list[i64] │ ╞═══════════╡ │ [1, 2, 3] │ │ [2, 0, 1] │ └───────────┘
2. 筛选包含任意指定元素的行
用list.contains_any()方法,判断列表列是否包含目标列表中的至少一个元素:
df_any = df.filter(pl.col("sets").list.contains_any(items)) print(df_any)
输出结果:
shape: (6, 1) ┌───────────┐ │ sets │ │ --- │ │ list[i64] │ ╞═══════════╡ │ [1, 2, 3] │ │ [2, 12] │ │ [6, 6, 1] │ │ [2, 0, 1] │ │ [1, 1, 4] │ │ [2, 7, 2] │ └───────────┘
方法优势
这两个方法都是Polars的向量化操作,底层由Rust实现,比Python层面的循环或列表推导效率高得多,处理大体积DataFrame时优势尤为明显。
如果你的Polars版本较旧(比如0.18.x及以前),只需把items转成Polars Series传入即可:pl.Series(items),新版本直接传列表就能正常运行。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

