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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage