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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage