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

У меня есть два фрейма данных, которые я пытаюсь объединить по совпадению со значениями в столбце. Соответствующие столбцы - header1 в Df1 и header2 в Df2 (значение - list). Ищу адаптированный подход.

Df1:                                          Df2:
|--------------|---------------|              |--------------|------------------------|       
|      id_1    |     header1   |              |      id_2    |    header2             |
|--------------|---------------|              |--------------|------------------------|
|      112     |      item1    |              |      32      |['item1','item2',...]   |
|--------------|---------------|              |--------------|------------------------|
|      56      |      mass     | 
|--------------|---------------|

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

Df_merged:                                       
|--------------|---------------|--------------|------------------------|       
|      id_1    |     header1   |      id_2    |    header2             |
|--------------|---------------|--------------|------------------------|
|      112     |      item1    |      32      |['item1','item2',...]   |
|--------------|---------------|--------------|------------------------|

Кто-нибудь знает, как объединить эти два фрейма данных? Я совершенно не знаю, как с этим справиться. Заранее большое спасибо.


person elitebook190    schedule 18.06.2020    source источник


Ответы (1)


Используйте DataFrame.explode с переназначением header2 на header1, чтобы избежать потери исходного столбца header2, а затем использовать DataFrame.merge:

df = df1.merge(df2.assign(header1 = df2['header2']).explode('header1'), on='header1')
person jezrael    schedule 18.06.2020
comment
Спасибо ! это то что мне нужно. - person elitebook190; 18.06.2020
comment
@ elitebook190 - Спасибо, рад помочь. Не забудьте принять ответ, если он вам подходит! :) - person jezrael; 18.06.2020
comment
У меня есть еще один вопрос, хочу ли я использовать fuzz.ratio строки с fuzzywuzzy? любая идея - person elitebook190; 18.06.2020
comment
@ elitebook190 - Тогда можно проверить это - person jezrael; 18.06.2020
comment
Спасибо! Извините, еще один вопрос: как насчет списка в header1 и списка в header 2. проверьте, существует ли общий элемент. - person elitebook190; 18.06.2020
comment
@ elitebook190 - Используйте df = df1.assign(new= df1['header1']).explode('new').merge(df2.assign(new= df2['header2']).explode('new'), on='new') - person jezrael; 18.06.2020
comment
Я снова думаю, что дифлиб более полезен с коэффициентом 0,95? - person elitebook190; 18.06.2020