Respuestas:
ya sea:
df['index1'] = df.index
o .reset_index
:
df.reset_index(level=0, inplace=True)
entonces, si tiene un marco multi-índice con 3 niveles de índice, como:
>>> df
val
tick tag obs
2016-02-26 C 2 0.0139
2016-02-27 A 2 0.5577
2016-02-28 C 6 0.0303
y desea convertir los niveles primero ( tick
) y tercero ( obs
) en el índice en columnas, haría:
>>> df.reset_index(level=['tick', 'obs'])
tick obs val
tag
C 2016-02-26 2 0.0139
A 2016-02-27 2 0.5577
C 2016-02-28 6 0.0303
df.reset_index(level=df.index.names, inplace=True)
uno se puede convertir un índice múltiple entero dado en columnas
df.reset_index()
índice múltiple completo, simplemente use , que mueve la totalidad del índice a las columnas (una columna por nivel) y crea un índice int de 0 a len (df) -1
df['index1'] = df.index
devuelve una advertencia: "Se está intentando establecer un valor en una copia de un segmento de un DataFrame". Utilice la función df.assign () en su lugar, como se muestra a continuación.
Para proporcionar un poco más de claridad, echemos un vistazo a un DataFrame con dos niveles en su índice (un MultiIndex).
index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'],
['North', 'South']],
names=['State', 'Direction'])
df = pd.DataFrame(index=index,
data=np.random.randint(0, 10, (6,4)),
columns=list('abcd'))
El reset_index
método, llamado con los parámetros predeterminados, convierte todos los niveles de índice en columnas y utiliza un RangeIndex
índice simple como nuevo.
df.reset_index()
Use el level
parámetro para controlar qué niveles de índice se convierten en columnas. Si es posible, use el nombre del nivel, que es más explícito. Si no hay nombres de nivel, puede referirse a cada nivel por su ubicación entera, que comienza en 0 desde el exterior. Puede usar un valor escalar aquí o una lista de todos los índices que desea restablecer.
df.reset_index(level='State') # same as df.reset_index(level=0)
En el raro caso de que desee conservar el índice y convertirlo en una columna, puede hacer lo siguiente:
# for a single level
df.assign(State=df.index.get_level_values('State'))
# for all levels
df.assign(**df.index.to_frame())
rename_axis
+ reset_index
Primero puede cambiar el nombre de su índice a una etiqueta deseada, luego elevar a una serie:
df = df.rename_axis('index1').reset_index()
print(df)
index1 gi ptt_loc
0 0 384444683 593
1 1 384444684 594
2 2 384444686 596
Esto también funciona para MultiIndex
marcos de datos:
print(df)
# val
# tick tag obs
# 2016-02-26 C 2 0.0139
# 2016-02-27 A 2 0.5577
# 2016-02-28 C 6 0.0303
df = df.rename_axis(['index1', 'index2', 'index3']).reset_index()
print(df)
index1 index2 index3 val
0 2016-02-26 C 2 0.0139
1 2016-02-27 A 2 0.5577
2 2016-02-28 C 6 0.0303
Si desea usar el reset_index
método y también preservar su índice existente, debe usar:
df.reset_index().set_index('index', drop=False)
o para cambiarlo en su lugar:
df.reset_index(inplace=True)
df.set_index('index', drop=False, inplace=True)
Por ejemplo:
print(df)
gi ptt_loc
0 384444683 593
4 384444684 594
9 384444686 596
print(df.reset_index())
index gi ptt_loc
0 0 384444683 593
1 4 384444684 594
2 9 384444686 596
print(df.reset_index().set_index('index', drop=False))
index gi ptt_loc
index
0 0 384444683 593
4 4 384444684 594
9 9 384444686 596
Y si desea deshacerse de la etiqueta de índice, puede hacer lo siguiente:
df2 = df.reset_index().set_index('index', drop=False)
df2.index.name = None
print(df2)
index gi ptt_loc
0 0 384444683 593
4 4 384444684 594
9 9 384444686 596
df1 = pd.DataFrame({"gi":[232,66,34,43],"ptt":[342,56,662,123]})
p = df1.index.values
df1.insert( 0, column="new",value = p)
df1
new gi ptt
0 0 232 342
1 1 66 56
2 2 34 662
3 3 43 123
Una forma muy sencilla de hacerlo es usar el método reset_index (). Para un marco de datos df, use el código a continuación:
df.reset_index(inplace=True)
De esta forma, el índice se convertirá en una columna, y al usar inplace como True, se convertirá en un cambio permanente.