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

如何在Polars中使用list.count_matches处理多匹配参数?

高效统计Polars列表列与多目标值的匹配数量

针对你遇到的list.count_matches仅支持单个值的问题,推荐使用Polars的向量化列表操作来高效实现多目标值的匹配计数,无需Python循环。

实现代码

import polars as pl

src = pl.DataFrame(
    {
        "c1": ["a", "b", "c", "d"],
        "c2": [[0], [2, 3, 4], [3, 4, 7, 9], [3, 9]],
    }
)
targets = pl.Series([3, 7, 9])

# 添加匹配计数列
dst = src.with_columns(
    match_count=pl.col("c2").list.eval(pl.element().is_in(targets).sum())
)

print(dst)

输出结果

shape: (4, 3)
┌─────┬───────────────┬─────────────┐
│ c1  ┆ c2            ┆ match_count │
│ --- ┆ ---           ┆ ---         │
│ str ┆ list[i64]     ┆ i64         │
╞═════╪═══════════════╪═════════════╡
│ a   ┆ [0]           ┆ 0           │
│ b   ┆ [2, 3, 4]     ┆ 1           │
│ c   ┆ [3, 4, 7, 9]  ┆ 3           │
│ d   ┆ [3, 9]        ┆ 2           │
└─────┴───────────────┴─────────────┘

核心原理与优势

  • 向量化执行:list.eval是Polars专为列表列设计的向量化操作,底层由Rust实现,性能远优于Python层面的逐行遍历(如apply)。
  • 集合匹配优化:is_in(targets)会利用Polars的集合查找逻辑,快速判断元素是否属于目标值集合,再通过sum()统计匹配的布尔值数量。
  • 懒执行支持:默认情况下Polars会延迟执行操作,可与其他数据处理步骤合并优化,进一步提升整体效率。

性能优化建议

若目标值集合规模较大,可先将targets转换为Python集合,进一步加快is_in的查找速度:

target_set = set(targets.to_list())
dst = src.with_columns(
    match_count=pl.col("c2").list.eval(pl.element().is_in(target_set).sum())
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:43:36