从另一列的字符串列表中查找一列中的匹配项



我有两个数据帧。我需要找到一个匹配,并使用以下条件在另一列中返回结果。

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

我预期的最终结果是

df2 = pd.DataFrame(
{
"LookupResults": ["SYS", "THIS IS SYS3"]
}

基本上,我需要找到那些与我的关键字匹配的完整字符串的列。注意,我不希望测试系统作为我的结果。即没有部分。

到目前为止,我已经尝试过了。--转换关键字列以列出

findwords=df['Keywords'].values

--将查找字符串拆分为列表

df2['words'] =  [set(words) for words in 
df2['Lookup'].str.strip().str.split()]

--使用以下进行搜索

df2['match'] = df2.words.apply(lambda words: all(target_word in words for target_word in findwords))

我没有得到想要的结果。但是,如果我做了这样的事情findwords=['SYS']我得到了想要的结果。

很明显,我是个新手,缺少一些基础知识。感谢您的帮助。感谢

# define the pattern from Keywords in df1
# b : word boundary
pat='\b('+ '|'.join(df1['Keywords'].values) +')\b'
p
'\b(SYS|SYS2|SYS3)\b'
# extract pattern and filter using loc
df2.loc[df2['Lookup'].str.extract(pat)[0].notna()]

Lookup
1   SYS
3   THIS IS SYS3

相关内容

  • 没有找到相关文章

最新更新