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

Pandas基于列表的部分字符串匹配:提取匹配值并新增列

解决DataFrame基于列表的部分字符串匹配并提取匹配值问题

嘿,我来帮你搞定这个需求!你需要对DataFrame的items列做基于目标列表的部分匹配,新增status、count和matching_values三列对吧?直接上可运行的解决方案:

步骤1:准备数据和目标匹配列表

首先我们先定义你的基础DataFrame和匹配列表(这里我假设你的匹配列表是["apple", "cat", "dog"],你可以根据实际需求替换):

import pandas as pd

# 你的原始数据
df = pd.DataFrame({
    'items': ['grape', 'apple', 'cat, dog', 'dog, other']
})

# 自定义的匹配列表
target_list = ["apple", "cat", "dog"]

步骤2:编写匹配处理函数

我们写一个函数来逐行处理items列,提取匹配结果:

# 把列表转成集合,提升匹配效率(如果列表很大的话效果明显)
target_set = set(target_list)

def extract_matches(row):
    # 处理空值情况(如果你的数据里有NaN的话)
    if pd.isna(row['items']):
        return pd.Series([False, 0, pd.NA])
    
    # 把items按逗号分割并去除前后空格,避免空格导致匹配失败
    split_items = [item.strip() for item in row['items'].split(',')]
    # 筛选出在目标集合里的元素
    matched_items = [item for item in split_items if item in target_set]
    
    # 返回三个需要的字段
    return pd.Series([
        len(matched_items) > 0,  # status:是否存在匹配
        len(matched_items),      # count:匹配到的元素数量
        ', '.join(matched_items) if matched_items else pd.NA  # 匹配到的元素,无则返回NA
    ])

步骤3:新增列并查看结果

调用apply函数把处理结果赋值给新列:

# 新增三列
df[['status', 'count', 'matching_values']] = df.apply(extract_matches, axis=1)

# 查看最终结果
print(df)

运行后你会得到期望的输出:

items  status  count matching_values
0       grape   False      0             <NA>
1       apple    True      1            apple
2    cat, dog    True      2         cat, dog
3  dog, other    True      1              dog

关键细节说明

  • 处理空格问题:用strip()去除分割后每个元素的前后空格,避免像' dog'这种带空格的元素匹配不到目标列表里的'dog'。
  • 效率优化:把目标列表转成set,因为集合的成员查询(in操作)比列表快很多,当你的匹配列表很大时这个优化很有用。
  • 空值处理:函数里先判断items是否为NaN,避免分割空值时报错,同时返回合理的默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:47:39