Pandas dataframe "df1" имеет столбец ("Receiver") со строковыми значениями.
df1
Receiver
44 BANK
106 restaurant
149 Tax office
63 house
55 car insurance
Я хочу просмотреть каждую строку этого столбца, проверить, соответствуют ли они значениям (в основном, поисковым запросам из одного или двух слов) в другом фрейме данных ("df2"), и вернуть заголовок соответствующего столбца в правильных строках. Я пытаюсь сделать это с помощью следующей функции:
df1.Receiver.apply(lambda x:
''.join([i for i in df2.columns
if df2.loc[:,i].str.contains(x).any()])
)
Проблема:
Однако это работает только для значений в столбце df1 "Получатель", которые состоят из только одно слово (поэтому в этом случае работают "BANK", "restaurant" и "house").
Значения с двумя или более словами не работают (в данном случае «Налоговая инспекция» и «Страхование автомобиля»).
Разве str.contains () не должен также находить частичные совпадения? Как найти частичные совпадения также для значений в столбце «Получатель», которые содержат два или более слов?
edit: вот как выглядит df2, у него разные категории в качестве заголовков столбцов, а затем в каждом столбце есть поисковые термины в качестве значений
df2
Banks Restaurants Car House
0 BANK restaurant car house
1 bank mcdonalds
2 Subway
Здесь вся проблема в одном изображении, вывод можно увидеть справа, а категорий «Автомобиль» и «Налоговая инспекция» не найдены, поскольку получатели «Страхование автомобиля» и «Налоговая инспекция» (столбец получателя в df1) только частичное совпадение с поисковыми терминами "автомобиль" и "Налог" (значения в столбцах df2 "Автомобиль" и "Налоговая служба").
![enter image description here](https://i.stack.imgur.com/YVXhf.png)