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

如何在Pandas中匹配关键词并返回匹配项而非布尔标记

Pandas关键词匹配:返回匹配元素而非0/1

现有如下数据集和代码:

import pandas as pd

dx = pd.DataFrame({'IDs':[1234,5346,1234,8793,8793],
                    'Names':['APPLE ABCD ONE','APPLE ABCD','NO STRAWBERRY YES','ORANGE AVAILABLE','TEA AVAILABLE']})

kw = ['APPLE', 'ORANGE', 'LEMONS', 'STRAWBERRY', 'BLUEBERRY', 'TEA COFFEE']
# 当前代码仅返回0/1
dx['Check']=dx['Names'].apply(lambda x: 1 if any(k in x for k in kw) else 0)

当前Check列仅标记匹配状态(1/0),需求改为返回实际匹配的kw元素,以下是几种可行方案:


方案1:返回第一个匹配的关键词

若只需返回第一个命中的关键词,未匹配则返回None:

dx['Check'] = dx['Names'].apply(
    lambda x: next((k for k in kw if k in x), None)
)

运行结果:

IDsNamesCheck
1234APPLE ABCD ONEAPPLE
5346APPLE ABCDAPPLE
1234NO STRAWBERRY YESSTRAWBERRY
8793ORANGE AVAILABLEORANGE
8793TEA AVAILABLENone

注:TEA AVAILABLE未匹配是因为kw中的TEA COFFEE是完整子串,若需匹配单个"TEA",需将kw中的TEA COFFEE改为TEA。


方案2:返回所有匹配的关键词(列表形式)

如果存在多个关键词匹配(比如Names值为"APPLE STRAWBERRY"),返回所有匹配项的列表:

dx['Check'] = dx['Names'].apply(
    lambda x: [k for k in kw if k in x]
)

无匹配的行会返回空列表[],若需替换为None可调整代码:

dx['Check'] = dx['Names'].apply(
    lambda x: [k for k in kw if k in x] or None
)

方案3:返回所有匹配关键词的拼接字符串

若需要用逗号分隔匹配项:

dx['Check'] = dx['Names'].apply(
    lambda x: ', '.join([k for k in kw if k in x]) or None
)

内容的提问来源于stack exchange,提问作者Teuku Ario Maulana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:55:18