如何将列表中的特定单词匹配到 pandas 列?

How to match particular word in the list to pandas column?

a = ['bed', 'mattress', 'sheets', 'pillow', 'admission kits']

df = pd.DataFrame({'sr.no':[1,2,3,4,5], 'des': ['2 bed rooms', 'natural language processing', '2x2 sheets grabs', '2 meter long pillow', '2x30mm long']})

df =   sr.no       des
       1           2 bed rooms
       2           natural language processing
       3           2x2 sheets grabs
       4           2 meter long pillow
       5           2x30mm long

这是列表 'a' 和数据框 'df'。所以在这里我想将列表 'a' 中的元素与数据框列 'des' 匹配。如果 'a' 单词列表出现在 'des' 列中,则打印匹配的单词,否则打印不匹配。

这是我想要的输出:

out=   sr.no    des                            output
       1        2 bed rooms                    bed
       2        natural language processing    not match
       3        2x2 sheets grabs               sheets 
       4        2 meter long pillow            pillow
       5        2x30mm long                    not match

如何使用 python 执行此操作?

如果我们只想看是否匹配,可以使用str.contains进行校验,np.where进行赋值:

df['output'] = np.where(df['des'].str.contains('|'.join(a)), 'match', 'not match')

输出:

   sr.no                          des     output
0      1                  2 bed rooms      match
1      2  natural language processing  not match
2      3             2x2 sheets grabs      match
3      4          2 meter long pillow      match
4      5                  2x30mm long  not match

不要使用 split 解决方案,因为在列表中由 space 连接的值在这里 'admission kits',为避免它使用 Series.str.extract:

pat = r"\b({})\b".format("|".join(x for x in a))
df['output'] = df['des'].str.extract(pat).fillna('not match')
print (df)
   sr.no                          des     output
0      1                  2 bed rooms        bed
1      2  natural language processing  not match
2      3             2x2 sheets grabs     sheets
3      4          2 meter long pillow     pillow
4      5                  2x30mm long  not match