2013-01-12 4 views
2

je l'dataframe suivante:Réindexer sans changer l'ordre

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 

Lorsque j'utilise df.reindex (index = [1,2,3,4,5,6]) - essentiellement la colonne 'ni' (l'index que je veux utiliser) - alors cela va changer l'ordre de mon dataframe, que j'essaie d'éviter. Je sais que je peux le faire avec renommer, mais les données ont 5,0000 lignes et il est assez fatigué d'écrire un tel dictionnaire ...

Alors est-il un moyen de rester l'ordre, mais changer l'index ou y at-il un truc faire un changement de nom plus rapide ou simplement adapter ni comme index?

+1

Est-ce que df.set_index ("ni") résout votre problème? – HYRY

Répondre

1

Si l'on suppose votre dataframe est la suivante (avec index 'in'), vous pouvez utiliser 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 

Bien que ce soit probablement correct dans de nombreux cas, si vous êtes préoccupé par la vitesse et l'utilisation de la mémoire, vous pouvez le faire inplace (c.-à-d. Changer df sans créer de copie).

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

inplace semble être environ 30% plus rapide.

+0

Thx beaucoup, pour une raison quelconque, je n'étais pas au courant de celui-là! – oliver13

Questions connexes