2012-06-29 23 views
9

Supongamos que tengo un DataFrame df con un MultiIndex y tiene el nivel L.a MultiIndex, eliminando sin perder

¿Hay una manera de quitar L del índice y añadir de nuevo?

df = df.index.drop('L') elimina L completamente del DataFrame (a diferencia de df= df.reset_index() que tiene un argumento de soltar). Podría, por supuesto, hacer df = df.reset_index().set_index(everything_but_L, inplace=True).

Ahora, supongamos que el índice contiene todo menos L, y quiero agregar L. df.index.insert(0, df.L) no funciona. Una vez más, podría llamar al df= df.reset_index().set_index(everything_including_L, inplace=True), pero no se siente bien.

¿Por qué necesito esto? Como los índices no necesitan ser únicos, puede ocurrir que quiera agregar una nueva columna para que el índice sea único. Dejar caer puede ser útil en situaciones donde después de dividir datos, un nivel del índice ya no contiene información (digamos que mi índice es A, B y yo operamos en un df con A = x, pero no quiero perder A que ocurriría con index.droplevel ('A')).

Respuesta

15

En la versión actual (0.17.1) es posible

df.set_index(column_to_add, append=True, inplace=True) 

y

df.reset_index(level=column_to_remove_from_index). 

Esto viene junto con una aceleración sustancial frente a restablecer n columnas y después añadiendo n + 1 a El índice.

Cuestiones relacionadas