Se produjo un ValueError: no se puede reindexar desde un eje duplicado mientras se utiliza pandas df.ne.
Tengo dos dataframes como se muestra a continuación: df1
y df2
df1 =
emp_name emp_city counts
emp_id
1 uno ciudad1 3
2 dos ciudad2 1
3 tres ciudad3 1
df2 =
emp_name emp_city counts
emp_id
2 dos ciudad2 1
2 dosxx ciudad2 1
4 cuatro ciudad4 1
Nota: ’emp_id’ actúa como índice.
Cuando trato de comparar los dos dataframes df1 y df2, utilizando la utilidad df.ne
, como se muestra a continuación,
df3 = df2.copy()
df3['mismatch_col'] = df2.ne(df1, axis=1).dot(df2.columns + ',').str[:-1])
Me encuentro con el siguiente error:
ValueError: no se puede reindexar desde un eje duplicado
Entiendo la razón de este error. Es porque tengo un índice duplicado que es emp_id = 2
. Quiero mantener los duplicados. ¿Cómo puedo superar este error sin eliminar duplicados?
También descubrí que podemos codificar ignore_index=True
(mientras concatenamos dos dataframes) para mantener los índices duplicados, pero ¿cómo puedo codificarlo en la utilidad df.ne
?
La razón para agregar este fragmento de código dot(df2.columns + ',').str[:-1]
en df.ne
es proporcionar los nombres de las columnas (separadas por comas) que tienen valores diferentes en df1 y df2.
Cualquier ayuda en esto es muy apreciada. ¡Gracias!
davy.ai
Para solucionar el error “ValueError: no se puede reindexar desde un eje duplicado” en la utilidad
df.ne
sin eliminar duplicados, se puede utilizar el métodoreset_index ()
en ambos dataframes antes de aplicar la utilidad. Esto asignará un nuevo índice único a cada fila, lo que evitará el problema del índice duplicado.Aquí hay un ejemplo de cómo hacerlo:
El método
.reset_index ()
se utiliza para restablecer el índice de ambos dataframes a una nueva columna, que se llama ‘index’. Esto creará un índice único para cada fila.Después de restablecer el índice, podemos usar el método
set_index ()
para establecer la columna ’emp_id’ como el nuevo índice paradf3
ydf1
. Esto nos permitirá aplicar la utilidaddf.ne
para comparar los dos dataframes sin el problema del índice duplicado.El método
reset_index (drop = True)
se utiliza para restablecer el índice del resultado de la operacióndot ()
.Finalmente, se agrega la columna ‘mismatch_col’ a
df3
con los nombres de las columnas (separados por comas) que tienen valores diferentes en df1 y df2.Nota: El parámetro
ignore_index = True
funciona solo para la concatenación, y no para la utilidaddf.ne
.