Python Fuzzy Matching (FuzzyWuzzy) - Behalte nur die beste Übereinstimmung
Ich versuche, zwei CSV-Dateien, die jeweils eine Spalte mit Namen enthalten, mit Fuzzy-Übereinstimmungen abzugleichen, die ähnlich, aber nicht identisch sind.
Mein Code ist bis jetzt wie folgt:
import pandas as pd
from pandas import DataFrame
from fuzzywuzzy import process
import csv
save_file = open('fuzzy_match_results.csv', 'w')
writer = csv.writer(save_file, lineterminator = '\n')
def parse_csv(path):
with open(path,'r') as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
yield row
if __name__ == "__main__":
## Create lookup dictionary by parsing the products csv
data = {}
for row in parse_csv('names_1.csv'):
data[row[0]] = row[0]
## For each row in the lookup compute the partial ratio
for row in parse_csv("names_2.csv"):
#print(process.extract(row,data, limit = 100))
for found, score, matchrow in process.extract(row, data, limit=100):
if score >= 60:
print('%d%% partial match: "%s" with "%s" ' % (score, row, found))
Digi_Results = [row, score, found]
writer.writerow(Digi_Results)
save_file.close()
Die Ausgabe ist wie folgt:
Name11 , 90 , Name25
Name11 , 85 , Name24
Name11 , 65 , Name29
Das Skript funktioniert gut. Die Ausgabe ist wie erwartet. Aber was ich suche, ist nur die beste Übereinstimmung.
Name11 , 90 , Name25
Name12 , 95 , Name21
Name13 , 98 , Name22
Also muss ich die doppelten Namen in Spalte 1 irgendwie löschen, basierend auf dem höchsten Wert in Spalte 2. Es sollte ziemlich einfach sein, aber ich kann es scheinbar nicht herausfinden. Jede Hilfe wäre dankbar.