Aplique coincidencias difusas en una columna de marco de datos y guarde los resultados en una nueva columna

Tengo dos marcos de datos con cada uno que tiene un número diferente de filas. A continuación hay un par de filas de cada conjunto de datos.

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

y

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

Me uní a ellos lado a lado usandocombined_data = pandas.concat([df1, df2], axis = 1). Mi próximo objetivo es comparar cada cadena debajodf1['Company'] a cada cadena debajo de endf2['FDA Company'] utilizando varios comandos de coincidencia diferentes de lafuzzy wuzzy módulo y devolver el valor de la mejor coincidencia y su nombre. Quiero almacenar eso en una nueva columna. Por ejemplo si hice elfuzz.ratio yfuzz.token_sort_ratio enLACKY SHEET METAL endf1['Company'] adf2['FDA Company'] volvería que el mejor partido fueLACKY SHEET METAL con una puntuación de100 y esto se guardaría en una nueva columna encombined data. Los resultados se verían así

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

Intenté hacer

combined_data['name_ratio'] = combined_data.apply(lambda x: fuzz.ratio(x['Company'], x['FDA Company']), axis = 1) 

Pero recibí un error porque las longitudes de las columnas son diferentes.

Estoy perplejo ¿Cómo puedo lograr esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta