Хотя этот вопрос тесно связан с Fuzzy Match Merge с пандами , этот вопрос конкретно касается слияния only (или подмножества, в данном случае), когда вводится одна DataFrame
- полное совпадение или подстрока ключа в другом DataFrame
.Чтобы проиллюстрировать мою точку зрения, вот 2 DataFrames
:
df1
id code
0 1 E282
1 2 O0080
2 3 R52
3 4 J0100
4 5 F99
df2
code val
0 V282 11
1 O008 12
2 J0101 13
3 F99 14
4 R55 15
Проблема с использованием difflib
состоит в том, что я действительно не хочу сопоставлять ближайшую строку, и я не уверен, что 'мог бы разделять совпадения, такие как V282
- E282
, что не должно происходить, и совпадения, такие как O008
- O0080
, которые должны объединяться.
Ожидаемый результат должен быть
code1 id
0 O0080 2
1 F99 5
. Я могу получить этот результат с помощью
import numpy as np
df1[np.logical_or.reduce([df1['code'].str.contains(code) for code in df2.code.tolist()])]
, но поскольку df1
имеет длину 42M строк, а df2
содержит~ 4000 кодов, этот метод невероятно медленный.Это лучшее, что я собираюсь сделать?Просто кажется прискорбным, когда внутреннее объединение строки 21M df и строки 7M df для точных ключей занимает <1 минуту.</p>