2013-01-12 48 views
2

我有以下數據幀:重新索引,而不改變順序

in year ni d m x y  q 
1 2012 1 2 0 NaN NaN  3 
6 2012 2 1 1 9 9  1 
5 2012 3 1 1 17 17  1 
3 2012 4 0 3 37 37  0 
5 2012 5 1 0 NaN NaN  3 
2 2012 6 3 1 15 15  3 

當我使用df.reindex(指數= [1,2,3,4,5,6]) - 基本上列 'に'(我想使用的索引) - 那麼這將改變我的數據框的順序,我試圖避免。我知道我可以用重命名,但數據有5,0000行,寫這樣的字典很疲倦...

那麼有沒有辦法保持順序,但改變索引或有一個伎倆做一個更快的重命名或簡單地適應ni作爲索引?

+1

是df.set_index(「ni」)解決你的問題嗎? – HYRY

回答

1

假設你的數據幀如下(與指數'in'),你可以使用set_index

In [1]: df = pd.read_csv('ni.csv', sep='\s+', index_col=0) 

In [2]: df 
Out[2]: 
    year ni d m x y q 
in       
1 2012 1 2 0 NaN NaN 3 
6 2012 2 1 1 9 9 1 
5 2012 3 1 1 17 17 1 
3 2012 4 0 3 37 37 0 
5 2012 5 1 0 NaN NaN 3 
2 2012 6 3 1 15 15 3 

In [3]: df.set_index('ni', drop=False) 
Out[3]: 
    year ni d m x y q 
ni       
1 2012 1 2 0 NaN NaN 3 
2 2012 2 1 1 9 9 1 
3 2012 3 1 1 17 17 1 
4 2012 4 0 3 37 37 0 
5 2012 5 1 0 NaN NaN 3 
6 2012 6 3 1 15 15 3 

雖然這在許多情況下可能是好的,如果您擔心速度,你可以做到這一點的內存使用情況inplace(即更改df而不創建副本)。

In [4]: df.set_index('ni', drop=False, inplace=True) 

inplace似乎是大約30%的速度。

+0

Thx很多,出於某種原因,我不知道那一個! – oliver13