Найти все совпадения строк в столбце во втором фрейме данных и вернуть совпадения в соседних строках

#python #python-3.x #pandas #dataframe

#python #python-3.x #pandas #фрейм данных

Вопрос:

У меня есть два фрейма данных, df1 [‘Ключевое слово’] и df2 [‘Описание’] Я пытаюсь найти каждый экземпляр строк, найденных в столбце в df1 [‘Ключевое слово’], которые появляются в df2 [‘Описание’] и возвращают совпадающие строки в соседних столбцах в df2.

Желаемый результат

 df1['Keyword']      df2['Description']               df2['Match1']    df2['Match 2']   df3['Match 3']
apples              apples are tasty                 apples
bananas             apples and bananas are tasty     apples           bananas
oranges             oranges, lemons, apples          oranges          lemons           apples
lemons              cucumber
 

(Я пометил столбцы совпадений здесь, но они могут быть названы как угодно).

Что я пробовал:

 df2['Match'] = df2['Description'].apply(lambda x: lookup(x, df1['Keyword']))
 

Это помогает мне пройти большую часть пути, но оно извлекает только первое ключевое слово, которому оно соответствует в df2 [‘Description’], и помещает его в новый столбец с именем [‘Match’], тогда как мне нужно найти каждое совпадение (в идеале точное совпадение).

Спасибо за любую помощь, только начал учиться.

Ответ №1:

Вы могли бы сделать:

 regex = r'|'.join(df1.Keyword)
df = pd.concat([df1, df2,
                (pd.DataFrame(df2.Description
                                 .str.findall(regex).to_list()))],
               axis='columns').fillna('')
 

Результат:

    Keyword                   Description        0        1       2
0   apples              apples are tasty   apples                 
1  bananas  apples and bananas are tasty   apples  bananas        
2  oranges       oranges, lemons, apples  oranges   lemons  apples
3   lemons                      cucumber