我有两个数据帧。我需要找到一个匹配,并使用以下条件在另一列中返回结果。
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