Fuzzy-Matching auf eine Datenrahmenspalte anwenden und Ergebnisse in einer neuen Spalte speichern
Ich habe zwei Datenrahmen mit jeweils einer unterschiedlichen Anzahl von Zeilen. Unten finden Sie ein paar Zeilen aus jedem Datensatz
df1 =
Company City State ZIP
FREDDIE LEES AMERICAN GOURMET SAUCE St. Louis MO 63101
CITYARCHRIVER 2015 FOUNDATION St. Louis MO 63102
GLAXOSMITHKLINE CONSUMER HEALTHCARE St. Louis MO 63102
LACKEY SHEET METAL St. Louis MO 63102
un
df2 =
FDA Company FDA City FDA State FDA ZIP
LACKEY SHEET METAL St. Louis MO 63102
PRIMUS STERILIZER COMPANY LLC Great Bend KS 67530
HELGET GAS PRODUCTS INC Omaha NE 68127
ORTHOQUEST LLC La Vista NE 68128
Ich bin ihnen Seite an Seite mit @ beigetretcombined_data = pandas.concat([df1, df2], axis = 1)
. Mein nächstes Ziel ist es, jede Zeichenfolge unter @ zu vergleichedf1['Company']
zu jeder Zeichenfolge unter indf2['FDA Company']
mit verschiedenen übereinstimmenden Befehlen aus demfuzzy wuzzy
module und geben den Wert der besten Übereinstimmung und den Namen zurück. Ich möchte das in einer neuen Spalte speichern. Zum Beispiel, wenn ich dasfuzz.ratio
undfuzz.token_sort_ratio
aufLACKY SHEET METAL
imdf1['Company']
zudf2['FDA Company']
Es würde zurückkehren, dass die beste Übereinstimmung warLACKY SHEET METAL
mit einer Punktzahl von100
und dies würde dann unter einer neuen Spalte in @ gespeichert werdcombined data
. Die Ergebnisse würden wie folgt aussehen:
combined_data =
Company City State ZIP FDA Company FDA City FDA State FDA ZIP fuzzy.token_sort_ratio match fuzzy.ratio match
FREDDIE LEES AMERICAN GOURMET SAUCE St. Louis MO 63101 LACKEY SHEET METAL St. Louis MO 63102 LACKEY SHEET METAL 100 LACKEY SHEET METAL 100
CITYARCHRIVER 2015 FOUNDATION St. Louis MO 63102 PRIMUS STERILIZER COMPANY LLC Great Bend KS 67530
GLAXOSMITHKLINE CONSUMER HEALTHCARE St. Louis MO 63102 HELGET GAS PRODUCTS INC Omaha NE 68127
LACKEY SHEET METAL St. Louis MO 63102 ORTHOQUEST LLC La Vista NE 68128
Ich habe versucht, @ zu t
combined_data['name_ratio'] = combined_data.apply(lambda x: fuzz.ratio(x['Company'], x['FDA Company']), axis = 1)
Aber es ist ein Fehler aufgetreten, da die Längen der Spalten unterschiedlich sind.
Ich bin ratlos. Wie kann ich das erreichen?