es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)
Tags:  , ,

Answer

  1. Avatar for 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:

    pep_name = []
    sim_name = []
    dob_list = []
    country_list = []
    for i in dfdum.NAME:
        matches = process.extractOne(i, dfpep.NAME, scorer=fuzz.token_set_ratio)
        pep_name.append(matches[0])
        sim_name.append(matches[1])
        match_row = dfpep[dfpep.NAME == matches[0]].iloc[0]
        dob_list.append(match_row['DOB'])
        country_list.append(match_row['Country'])
    dfdum['pep_name'] = pd.Series(pep_name)
    dfdum['similarity'] = pd.Series(sim_name)
    dfdum['DOB'] = pd.Series(dob_list)
    dfdum['Country'] = pd.Series(country_list)
    

    Aquí, hemos agregado dos listas vacías nuevas, dob_list y country_list, para almacenar las fechas de nacimiento y los países de residencia de cada coincidencia. Dentro del bucle, usamos process.extractOne en lugar de process.extract para obtener una única mejor coincidencia para cada nombre y accedemos directamente a la fila correspondiente en dfpep utilizando dfpep[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.

Comments are closed.