¿Cómo convertir pandas index en un dataframe a una columna?


Esto parece bastante obvio, pero parece que no puedo averiguar cómo convertir un índice de marco de datos a 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  
 246
Author: Brian Tompsett - 汤莱恩, 2013-12-09

3 answers

O bien:

df['index1'] = df.index

O, .reset_index:

df.reset_index(level=0, inplace=True)

Entonces, si tienes 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 1st (tick) y 3rd (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
 416
Author: behzad.nouri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-23 02:20:50

Para MultiIndex puede extraer su subindex usando

df['si_name'] = R.index.get_level_values('si_name') 

Donde si_name es el nombre del subíndice.

 23
Author: Apogentus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-26 14:13:58

Para proporcionar un poco más de claridad, veamos un DataFrame con dos niveles en su índice (un multiíndice).

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'))

introduzca la descripción de la imagen aquí

El método reset_index, llamado con los parámetros predeterminados, convierte todos los niveles de índice en columnas y usa un simple RangeIndex como nuevo índice.

df.reset_index()

introduzca la descripción de la imagen aquí

Utilice el parámetro 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 nivel nombres, puede referirse a cada nivel por su ubicación entera, que comienzan 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)

introduzca la descripción de la imagen aquí

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())
 10
Author: Ted Petrou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-24 22:04:27