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

Pandas实现:统计列表元素在列每行的匹配次数并新增列

问题描述

现有如下pandas DataFrame:

MEMBERSHIP
[2022_K_, EWREW_NK]
[333_NFK_,2022_K_, EWREW_NK, 000]

同时有一个关键词列表:

list_k = ["_K_","_NK_","_NKF_","_KF_"]

需要新增一列COUNT,统计MEMBERSHIP列每行中包含上述关键词的元素数量,期望输出如下:

MEMBERSHIP                        | COUNT
[2022_K_, EWREW_NK]               | 2
[333_NFK_,2022_K_, EWREW_NK, 000] | 3
解决方案

以下是两种可行的实现方式:

方法一:自定义函数结合apply

先编写一个统计单条列表中匹配元素数量的函数,再对MEMBERSHIP列应用该函数:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    "MEMBERSHIP": [
        ["2022_K_", "EWREW_NK"],
        ["333_NFK_", "2022_K_", "EWREW_NK", "000"]
    ]
})

list_k = ["_K_","_NK_","_NKF_","_KF_"]

def count_matching_items(items):
    count = 0
    for item in items:
        # 判断当前元素是否包含任意一个目标关键词
        if any(keyword in item for keyword in list_k):
            count += 1
    return count

# 新增COUNT列
df["COUNT"] = df["MEMBERSHIP"].apply(count_matching_items)

print(df)

执行后输出结果:

MEMBERSHIP  COUNT
0              [2022_K_, EWREW_NK]      2
1  [333_NFK_, 2022_K_, EWREW_NK, 000]      3

方法二:向量化操作(适合大数据量)

通过explode展开列表元素,结合正则匹配关键词,最后按原行索引聚合统计,效率更高:

import pandas as pd

df = pd.DataFrame({
    "MEMBERSHIP": [
        ["2022_K_", "EWREW_NK"],
        ["333_NFK_", "2022_K_", "EWREW_NK", "000"]
    ]
})

list_k = ["_K_","_NK_","_NKF_","_KF_"]

# 将关键词拼接为正则匹配模式
match_pattern = '|'.join(list_k)

# 展开列表、匹配关键词、按原索引求和计数
df["COUNT"] = df["MEMBERSHIP"].explode().str.contains(match_pattern, regex=True).groupby(level=0).sum()

print(df)

这种方式避免了逐行循环,在处理大规模数据时性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:05:28