#jupyter-notebook #fuzzywuzzy
Вопрос:
У меня есть два набора данных: один, содержащий уникальный набор записей с соответствующим округом, и другой, содержащий дубликаты записей с уникальным номером единицы измерения.
Вот пример набора данных, содержащего повторяющиеся записи, но с уникальным номером единицы измерения:
Добровольная пожарная часть Альбиона 62QRS
Добровольная пожарная часть Альбиона 62.
Другой набор данных содержит уникальный департамент и соответствующий округ.
Добровольная пожарная служба Альбиона Эри
Нечеткая логика работает с названием подразделения-Добровольная пожарная часть Альбиона. Проблема в том, что слово Эри применяется только к одной из записей, а другой округ присваивается неправильно.
import pandas as pd
import numpy as np
import os
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
df_1 = pd.read_csv('ori2.csv')
df_2 = pd.read_csv('EMS.csv')
df_1.rename(columns={'Agency Type' : 'Type'}, inplace=True)
df_1 = df_1.loc[(df_1.Type == "EMS")]
#df_2 = df_2.loc[(df_2.County == "Erie")]
df_2.rename(columns={'ApplicantName' : 'Department'}, inplace=True)
def fuzzy_merge(df_1, df_2, key1, key2, threshold=90, limit=1):
s = df_2[key2].tolist()
m = df_1[key1].apply(lambda x: process.extract(x, s, limit=limit))
df_1['matches'] = m
m2 = df_1['matches'].apply(lambda x: ', '.join([i[0] for i in x if i[1] >= threshold]))
df_1['matches'] = m2
df_1['counties'] = df_2['County']
return df_1
df = fuzzy_merge(df_1, df_2, 'Department', 'Department', threshold=90, limit=1)
df.sort_values(by='Department',ascending=True).reset_index()
Я полагаю, что проблема в том, где я создаю новый столбец в df_1 под названием округа и назначаю его df_2 [«Округ»]. Результатом должен быть Эри, поскольку он находится в одном округе, а не в другом, поскольку код вводится в объединенный фрейм данных.
Спасибо