2012-05-05 50 views
73

我試圖重新索引大熊貓DataFrame對象,像這樣,在熊貓數據幀重新定義索引對象

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 

我要對這個如下圖所示,我得到錯誤的答案。如何做到這一點的任何線索?

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

任何想法爲什麼會發生這種情況?

+1

,因爲你使用的是1號DF建第二,這樣只會得到其中IDX2相交的行data.index,即。第1行 – RuiDC

回答

177

爲什麼不簡單使用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

爲了刪除索引名稱,如原始示例中所示:data2.index.name = None – Daniele

4

如果你不想 'A' 索引

在:

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 

在:

data2 = data.set_index('a') 

輸出:

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

在:

data2.index.name = None 

日期:

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

第二個輸出不正確。左側還有一個未命名的列,其中包含0,1,2。 – Yster