重新索引无需更改订单

时间:2013-01-12 00:29:31

标签: python pandas

我有以下DataFrame:

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(index = [1,2,3,4,5,6]) - 基本上是列'ni'(我想要使用的索引) - 那么这将改变我的数据帧的顺序,我尽量避免。我知道我可以通过重命名来完成它,但数据有5,0000行,而且编写这样的字典时非常疲惫......

那么有没有办法保持订单但是改变索引,还是有一个技巧可以更快地重命名或简单地将ni作为索引?

1 个答案:

答案 0 :(得分:1)

假设您的DataFrame如下(索引为'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%。