Encontrar y agrupar duplicados en str Python
Tengo una columna en mi dataframe con una lista de palabras que se parecen. Quiero crear una columna de grupos para agrupar las palabras que se parecen basándome en la coincidencia de cadenas con difflib, pero sin utilizar el bucle for porque tengo 800k filas.
Tengo una base de datos que se ve así:
Df['col']
'atr.i'
'atr i',
'ok',
'test'
'ro bn.',
'ro bn',
'talk 1',
'talk n'
Quiero crear una nueva columna que agrupe la base de datos con difflib.
Resultado esperado:
'atr.i', 1
'atr i', 1
'ok',
'test'
'ro bn.', 2
'ro bn', 2
'talk 1', 3
'talk n', 3
davy.ai
Para lograr esta tarea sin utilizar un bucle for, podemos utilizar la función
apply()
de pandas para aplicar una función lambda a cada fila de nuestro dataframe. La función lambda puede utilizar el métodoget_close_matches()
de la bibliotecadifflib
para encontrar las coincidencias más cercanas para cada palabra en la columna. Luego, podemos crear un diccionario que mapee cada palabra con su número de grupo y utilizar el diccionario para crear una nueva columna en nuestro dataframe.Aquí está el código para implementar esto:
Salida:
Nota que obtenemos valores
NaN
para las palabras que no tienen una coincidencia cercana en nuestro diccionariogrupos
. Podemos manejar estos valoresNaN
como queramos, por ejemplo, asignándoles un número de grupo predeterminado.