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

如何在Pandas中实现关键词全匹配筛选DataFrame行?

解决DataFrame完整关键词匹配筛选问题

你的核心问题是代码里用了all(...)判断,这要求df1中的所有关键词都出现在df2的行中才会标记匹配,但你的需求是只要包含任意一个完整关键词即可,把all换成any就能解决问题。

修正后的代码(基于你的原有思路)

import pandas as pd

df1 = pd.DataFrame(
    {
        "Keywords": ["SYS", "SYS2", "SYS3"]
    }
)
df2 = pd.DataFrame(
    {
        "Lookup": ["TEST SYSTEM", "SYS", "DUMMY" , "THIS IS SYS3"]
    }
)

# 提取关键词列表
findwords = df1['Keywords'].tolist()

# 将Lookup列拆分为单词集合
df2['words'] = df2['Lookup'].str.strip().str.split().apply(set)

# 改用any判断:只要存在任意一个关键词即匹配
df2['match'] = df2['words'].apply(lambda words: any(word in words for word in findwords))

# 筛选匹配行并提取结果列
lookup_results = df2[df2['match']]['Lookup'].rename('LookupResults')
print(lookup_results)

运行后输出符合预期:

1          SYS
3    THIS IS SYS3
Name: LookupResults, dtype: object

更高效的正则表达式方法

如果数据量较大,推荐直接用正则表达式匹配完整单词(\b表示单词边界,避免部分匹配),无需拆分字符串:

import pandas as pd

df1 = pd.DataFrame(
    {
        "Keywords": ["SYS", "SYS2", "SYS3"]
    }
)
df2 = pd.DataFrame(
    {
        "Lookup": ["TEST SYSTEM", "SYS", "DUMMY" , "THIS IS SYS3"]
    }
)

# 构建匹配完整单词的正则表达式
pattern = r'\b(' + '|'.join(df1['Keywords'].tolist()) + r')\b'

# 直接用str.contains判断匹配
df2['match'] = df2['Lookup'].str.contains(pattern, regex=True)

# 提取结果
lookup_results = df2[df2['match']]['Lookup'].rename('LookupResults')
print(lookup_results)

这个方法更简洁,且能精准避免"TEST SYSTEM"这类包含关键词子串的情况被误匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:40:48