2012-05-05 2 views
73

sto cercando di ri-indicizzare un oggetto panda DataFrame, in questo modo,Ridefinire l'indice in un Pandas dataframe oggetto

From: 
      a b c 
     0 1 2 3 
     1 10 11 12 
     2 20 21 22 

To : 
      b c 
     1 2 3 
     10 11 12 
     20 21 22 

sto andando su questo, come mostrato di seguito e sto ottenendo la risposta sbagliata. Qualche indizio su come farlo?

>>> col = ['a','b','c'] 
>>> data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col) 
>>> data 
    a b c 
0 1 2 3 
1 10 11 12 
2 20 21 22 
>>> idx2 = data.a.values 
>>> idx2 
array([ 1, 10, 20], dtype=int64) 
>>> data2 = DataFrame(data,index=idx2,columns=col[1:]) 
>>> data2 
    b c 
1 11 12 
10 NaN NaN 
20 NaN NaN 

Qualche idea del motivo?

+1

perché si sta utilizzando il 1 ° DF per costruire il secondo, questo sarà solo le righe in cui idx2 intersecano il data.index, es. riga 1 – RuiDC

risposta

177

Perché non utilizzare semplicemente il metodo set_index?

In : col = ['a','b','c'] 

In : data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col) 

In : data 
Out: 
    a b c 
0 1 2 3 
1 10 11 12 
2 20 21 22 

In : data2 = data.set_index('a') 

In : data2 
Out: 
    b c 
a 
1 2 3 
10 11 12 
20 21 22 
+15

Per rimuovere il nome dell'indice, come nell'esempio originale: data2.index.name = Nessuno – Daniele

4

Se non si vuole 'a' nell'indice

In:

col = ['a','b','c'] 

data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col) 

data 

Out:

a b c 
0 1 2 3 
1 10 11 12 
2 20 21 22 

In:

data2 = data.set_index('a') 

Out:

 b c 
a 
1 2 3 
10 11 12 
20 21 22 

In:

data2.index.name = None 

Out:

 b c 
1 2 3 
10 11 12 
20 21 22 
+1

La seconda uscita non è corretta. C'è ancora una colonna senza nome a sinistra contenente 0, 1, 2. – Yster