У меня есть два кадра данных, оба имеют идентификатор и столбец Name
, который содержит строки.Они могут выглядеть следующим образом:
Фреймы данных:
DF-1 DF-2
--------------------- ---------------------
ID Name ID Name
1 56 aaeessa 1 12 H.P paRt 1
2 98 1o7v9sM 2 76 aa3esza
3 175 HP. part 1 3 762 stakoverfl
4 2 stackover 4 2 lo7v9Sm
Я хотел бы вычислить сходство строк (например, Джакарда, Левенштейна) между одним элементом со всемидругие и выберите тот, который имеет самый высокий балл.Затем сопоставьте два идентификатора, чтобы я мог присоединиться к полному фрейму данных позже.Получившаяся таблица должна выглядеть следующим образом:
Результат:
Result
-----------------
ID1 ID2
1 56 76
2 98 2
3 175 12
4 2 762
Этого легко добиться, используя удвоенный цикл for, но я ищу элегантный(и более быстрый способ), чтобы достичь этого, может быть, понимание списка лямбд, или какой-нибудь инструмент панд.Может быть, некоторая комбинация groupby
и idxmax
для оценки сходства, но я не могу придумать решение самостоятельно.
РЕДАКТИРОВАТЬ: DataFrames имеют разные длины,одна из целей этой функции состоит в том, чтобы определить, какие элементы меньшего информационного кадра появляются в большем информационном кадре, и сопоставлять их, отбрасывая остальные.Поэтому в результирующей таблице должны появляться только пары идентификаторов, которые совпадают, или пары ID1 - NaN (при условии, что DF-1
имеет больше строк, чем DF-2
).