Ich habe zwei Datenframes mit jeweils unterschiedlicher Zeilenanzahl. Im Folgenden ein paar Zeilen aus jedem Datensatz istFuzzy-Matching über eine Datenrahmenspalte anwenden und Ergebnisse in einer neuen Spalte speichern
gesetztdf1 =
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
und
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 trat sie nebeneinander combined_data = pandas.concat([df1, df2], axis = 1)
verwenden. Mein nächstes Ziel ist es, jede Zeichenkette unter df1['Company']
mit jeder Zeichenkette unter df2['FDA Company']
zu vergleichen, indem mehrere verschiedene übereinstimmende Befehle vom Modul fuzzy wuzzy
verwendet werden und der Wert der besten Übereinstimmung und seines Namens zurückgegeben wird. Ich möchte das in einer neuen Spalte speichern. Zum Beispiel, wenn ich habe die fuzz.ratio
und fuzz.token_sort_ratio
auf LACKY SHEET METAL
in df1['Company']
-df2['FDA Company']
würde es zurückgeben, dass die beste Übereinstimmung war LACKY SHEET METAL
mit einer Punktzahl von 100
und dies würde dann unter einer neuen Spalte in combined data
gespeichert werden. Es Ergebnisse aussehen würde
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 versuchte
tuncombined_data['name_ratio'] = combined_data.apply(lambda x: fuzz.ratio(x['Company'], x['FDA Company']), axis = 1)
bekam aber einen Fehler, da die Längen der Spalten unterschiedlich sind.
Ich bin ratlos. Wie kann ich das erreichen?
Dies ist eine großartige Antwort! Aber für große Dateien (~ Lakhs) bekomme ich Speicherfehler – user1930402