python - read - ¿Cómo convertir el índice de pandas en un marco de datos a una columna?
python pandas excel (4)
Para MultiIndex puedes extraer su subíndice usando
df[''si_name''] = R.index.get_level_values(''si_name'')
donde si_name
es el nombre del subíndice.
Esto parece bastante obvio, pero parece que no entiendo cómo convierto un índice de marco de datos en una columna.
Por ejemplo:
df=
gi ptt_loc
0 384444683 593
1 384444684 594
2 384444686 596
A,
df=
index1 gi ptt_loc
0 0 384444683 593
1 1 384444684 594
2 2 384444686 596
Para proporcionar un poco más de claridad, veamos 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 método reset_index
, llamado con los parámetros predeterminados, convierte todos los niveles de índice en columnas y utiliza un RangeIndex
simple como nuevo índice.
df.reset_index()
Utilice el parámetro de level
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 de entero, 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 convertir el índice 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())
Si desea usar el método reset_index
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:
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
ya sea:
df[''index1''] = df.index
o, .reset_index
:
df.reset_index(level=0, inplace=True)
entonces, si tiene un marco de índice múltiple 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 quiere convertir los niveles 1º ( tick
) y 3º ( 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