У меня есть два фрейма данных со многими столбцами, и у каждого из фреймов данных есть идентификатор столбца, который можно использовать при соединении (тип внутреннего соединения SQL с более чем одним приемлемым соответствием). В выводе мне нужно иметь dataframe со всеми столбцами из обоих dataframes, поэтому я хотел использовать pd.merge. Сложность в том, что объединение не может быть выполнено простым сравнением ID_1 = ID_2, а скорее на общей подстроке. Вот как может выглядеть выборка данных (все типы данных являются строковыми) и что ожидается:
![enter image description here](https://i.stack.imgur.com/IRAGZ.png)
Я попытался найти пересечение между ID_1 и ID_2, а затем использовать его в условии left_on / right_on в pd.merge. Вот что я попробовал:
Создание выборки из двух кадров данных:
df_1 = pd.DataFrame({'ID_1': ['[COL_63334]', '[COL_63339, DNB_64268]', '[COL_67319, COL_94485]', '[COL_76540]', '[DNB_35923, DNB_23999, COL_30000]']})
df_2 = pd.DataFrame({'ID_2': ['[COL_63334, COL_63335, COL_63337, DNB_64268]', '[COL_63335, COL_63338, DNB_64268]', '[COL_94485]', '[COL_98341, COL_23144]', '[COL_5600, DNB_35923, DNB_36999, COL_30000]']})
Преобразование данных в список:
df_1['ID_1'] = df_1.ID_1.apply(lambda x: x[1:-1].split(', '))
df_2['ID_2'] = df_2.ID_2.apply(lambda x: x[1:-1].split(', '))
Найти пересечение двух списков с помощью:
df_1['intersect'] = set(df_1.ID_1).intersection(df_2.ID_2)
Найти пересечение двух списков с помощью:
[x for x in df_1.ID_1 if x in df_2.ID_2]
Оба метода поиска пересечения вернули эту ошибку:
TypeError: unhashable тип: 'list'