2012-05-05 15 views
73

Ich versuche, ein Pandas DataFrame Objekt neu indizieren, wie so,den Index in einer Pandas Dataframe Neudefinition Objekt

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 

ich darüber werde wie unten gezeigt und bin die falsche Antwort. Irgendwelche Hinweise, wie man das macht?

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

Jede Idee, warum dies geschieht?

+1

, weil Sie den ersten DF sind mit dem zweiten zu bauen, das nur die Zeilen, wo idx2 die sich kreuzen data.index, dh. Zeile 1 – RuiDC

Antwort

177

Warum verwenden Sie nicht einfach set_index Methode?

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

Um den Indexnamen wie im ursprünglichen Beispiel zu entfernen: data2.index.name = None – Daniele

4

Wenn Sie nicht wollen, 'a' im Index

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 10

:

 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

Der zweite Out ist nicht korrekt. Links ist noch eine unbenannte Spalte mit 0, 1, 2. – Yster