2016-06-24 5 views
1

У меня есть два кадра данных. Один из них содержит 33765 компаний. Другой содержит 358839 компаний. Я хочу найти совпадение между ними, используя нечеткое совпадение. Поскольку количество записей слишком велико, я пытаюсь разбить записи обоих кадров данных в соответствии с 1-й буквой названия компании. Например: для всех компаний, начинающихся с буквы «A», 1-й кадр данных имеет 2600 записей, а второй - 25000 записей. Я реализую полное слияние между ними, а затем применяю нечеткое соответствие, чтобы получить все компании с значением fuzz более 95. Это все еще не работает, потому что количество записей все еще слишком велико, чтобы выполнить полное слияние между ними, а затем реализовать нечеткое. Ядро умирает каждый раз, когда я делаю эти операции. Тот же подход работал отлично, когда количество записей в обоих кадрах было 4-значным. Также укажите, есть ли способ автоматизировать это для всех букв «А» до «Z», вместо того, чтобы вручную запускать код для каждой буквы (без создания ядра).Нечеткое совпадение между большим количеством записей

Вот мой код:

c='A' 
df1 = df1[df1.companyName.str[0] == c ].copy() 
df2 = df2[df2.companyName.str[0] == c].copy() 
df1['Join'] =1 
df2['Join'] =1 
df3 = pd.merge(df1,df2, left_on='Join',right_on='Join') 
df3['Fuzz'] = df3.apply(lambda x: fuzz.ratio(x['companyName_x'], x['companyName_y']) , axis=1) 
df3.sort_values(['companyName_x','Fuzz'],ascending=False, inplace=True) 
df4 = df3.groupby('companyName_x',as_index=False).first() 
df5=df4[df4.Fuzz>=95] 
+0

Почему ваше ядро ​​умирает? Сколько у вас RAM, у вас заканчивается RAM? Можете ли вы включить вывод 'df1.info (verbose = True, memory_usage = True)' и 'df1.info (verbose = True, memory_usage = True)' в ваш вопрос? – Kartik

+0

Я не знаю, почему, но это не отображает никакого вывода. – ComplexData

ответ

0

Вы начали идти вниз правильный путь по отрывов записи на основе общего приписываемого (первая буква). В литературе по связующим звеньям эта концепция называется blocking, и крайне важно уменьшить количество сравнений с чем-то сговорчивым.

Путь вперед состоит в том, чтобы найти еще лучшие правила блокировки: возможно, первые пять символов или общее слово.

dedupe library может помочь вам найти хорошие правила блокировки. (Я - основной разработчик для этой библиотеки)