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

如何在Pandas DataFrame中生成记录匹配关键词的新列?

匹配指定术语并生成新列的实现方案

方案1:生成列表格式的匹配结果

利用pandas的str.findall()方法,直接提取每行字符串中所有匹配的术语,返回列表形式:

import pandas as pd

# 初始化数据
df = pd.DataFrame({'String': ['Cat Dog Fish', 'Cat Dog', 'Pig Horse', 'DogFish', 'CatHorse']})
words = ['Cat', 'Dog', 'Fish']

# 构建匹配正则模式
match_pattern = '|'.join(words)
# 生成匹配列
df['Matched'] = df['String'].str.findall(match_pattern)

# 可选:过滤掉无匹配项的行(比如原数据里的"Pig Horse")
df = df[df['Matched'].str.len() > 0].reset_index(drop=True)
print(df)

执行后输出:

String           Matched
0  Cat Dog Fish  [Cat, Dog, Fish]
1       Cat Dog        [Cat, Dog]
2       DogFish       [Dog, Fish]
3      CatHorse             [Cat]

方案2:生成拼接字符串格式的匹配结果

在列表匹配的基础上,用apply()将匹配到的列表元素直接拼接成字符串:

import pandas as pd

df = pd.DataFrame({'String': ['Cat Dog Fish', 'Cat Dog', 'Pig Horse', 'DogFish', 'CatHorse']})
words = ['Cat', 'Dog', 'Fish']

match_pattern = '|'.join(words)
# 先提取匹配列表,再拼接为字符串
df['Matched'] = df['String'].str.findall(match_pattern).apply(''.join)

# 可选:过滤无匹配的行
df = df[df['Matched'] != ''].reset_index(drop=True)
print(df)

执行后输出:

String     Matched
0  Cat Dog Fish  CatDogFish
1       Cat Dog      CatDog
2       DogFish     DogFish
3      CatHorse         Cat

额外说明

  • 如果需要精确匹配完整单词(不想让DogFish被拆成Dog和Fish),可以给每个术语加上单词边界正则\b,修改匹配模式:
    match_pattern = '|'.join(r'\b{}\b'.format(word) for word in words)
    
  • 要是同一行有重复术语(比如Cat Cat Dog),findall会返回重复项,需要去重的话可以这么改:
    df['Matched'] = df['String'].str.findall(match_pattern).apply(lambda x: list(set(x)))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:27:24