2013-12-09 38 views

risposta

317

uno:

df['index1'] = df.index 

o, .reset_index:

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

quindi, se avete una struttura multi-indice con 3 livelli di indice, come:

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

e si desidera convertire il 1 ° (tick) e 3 ° (obs) livelli nell'indice in colonne, si farebbe:

>>> 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 
+4

tenere a mente che si deve fai questo n volte per ogni indice che possiedi (es. se hai due indici, allora devi farlo due volte) – dval

+7

Con 'df.reset_index (level = df.index.names, inplace = True)' si può convertire un dato intero multiindice in colonne – venti

+1

Puoi avere un indice sulla colonna tu appena aggiunto al dataframe quindi è una colonna vera E un indice? – bretcj7

22

Per MultiIndex è possibile estrarne il sottoindice utilizzando

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

dove si_name è il nome del sottoindice.

3

Per fornire un po 'più di chiarezza, diamo un'occhiata a DataFrame con due livelli nel suo indice (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')) 

enter image description here

Procedimento reset_index, chiamato con i parametri di default, converte tutti i livelli di indice a colonne e utilizza un semplice RangeIndex come nuovo indice.

df.reset_index() 

enter image description here

utilizzare il parametro level per controllare quali livelli dell'indice sono convertiti in colonne. Se possibile, usa il nome del livello, che è più esplicito. Se non ci sono nomi di livelli, puoi fare riferimento a ciascun livello in base alla posizione intera, che inizia da 0 dall'esterno. Puoi qui utilizzare un valore scalare o un elenco di tutti gli indici che desideri ripristinare.

df.reset_index(level='State') # same as df.reset_index(level=0) 

enter image description here

Nel raro caso in cui si desidera conservare l'indice e ruotare l'indice in una colonna, è possibile effettuare le seguenti operazioni:

# for a single level 
df.assign(State=df.index.get_level_values('State')) 

# for all levels 
df.assign(**df.index.to_frame()) 
Problemi correlati