Coincidencia difusa de Python Fuzzywuzzy con proceso y añadir información mediante la comparación de un dataframe.
Estoy tratando de hacer coincidir nombres de dos dataframes (en las columnas de nombre) usando fuzzywuzzy con process. El resultado debería ser df1 (dfdum) con el nombre de coincidencia mejor de df2 (dfpep) y el puntaje de similitud. Esto está funcionando muy bien con el código a continuación, pero además del nombre de coincidencia y del puntaje, quiero agregar más columnas de df2 a df1 en el resultado. Las fechas de nacimiento y los países de residencia de df2 que pertenecen al nombre de coincidencia también deben agregarse a df1. No puedo simplemente combinar por nombres porque hay duplicados.
¿Alguien puede ayudarme a modificar el código para que pueda agregar la información adicional de los nombres coincidentes de df2? Así que quiero agregar dos columnas adicionales a df1 con información relacionada del nombre coincidente de df2.
pep_name = []
sim_name = []
for i in dfdum.NAME:
ratio = process.extract(i, dfpep.NAME, limit=1, scorer=fuzz.token_set_ratio)
pep_name.append(ratio[0][0])
sim_name.append(ratio[0][1])
dfdum['pep_name'] = pd.Series(pep_name)
dfdum['sim_name'] = pd.Series(sim_name)
davy.ai
Para agregar la información adicional de los nombres coincidentes en df2 a df1, puedes modificar el código existente de la siguiente manera:
Aquí, hemos agregado dos listas vacías nuevas,
dob_list
ycountry_list
, para almacenar las fechas de nacimiento y los países de residencia de cada coincidencia. Dentro del bucle, usamosprocess.extractOne
en lugar deprocess.extract
para obtener una única mejor coincidencia para cada nombre y accedemos directamente a la fila correspondiente en dfpep utilizandodfpep[dfpep.NAME == matches[0]].iloc[0]
. Extraemos la información requerida de esta fila y la añadimos a las listas respectivas. Finalmente, añadimos cuatro nuevas columnas a dfdum('pep_name', 'similarity', 'DOB', 'Country')
y asignamos valores de las listas respectivas.