Решение, если необходимо, избегать извлечения значений в подстроках с word boundaries
:
Использование Series.str.extract
с регулярным выражением и границ слов с присоединенными значениями на |
для регулярного выражения OR
:
pat = '|'.join(r"\b{}\b".format(x) for x in df1['models'])
df2['model'] = df2['description'].str.extract('('+ pat + ')', expand=False)
print (df2)
description model
0 I am selling a Citroen C3 C3
1 I sell my Audi A3 A3
Разница :
df2 = pd.DataFrame({'description': ['I am selling a Citroen C3',
'I sell my Audi A3',
'I sell my Audi A31']})
pat = '|'.join(r"\b{}\b".format(x) for x in df1['models'])
df2['model1'] = df2['description'].str.extract('('+ pat + ')', expand=False)
Решение без границ слов должно возвращать неверные совпадающие значения:
pat = '|'.join(df1['models'])
df2['model2'] = df2['description'].str.extract('('+ pat + ')', expand=False)
print (df2)
description model1 model2
0 I am selling a Citroen C3 C3 C3
1 I sell my Audi A3 A3 A3
2 I sell my Audi A31 NaN A3