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?