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(index=[1,2,3,4,5,6]) - 基本上是列 'ni' (我想使用的索引) - 那么这将改变我的数据框的顺序,我尽量避免。我知道我可以通过重命名来做到这一点,但是数据有 5,0000 行,写这样一个字典很累......

那么有没有办法保持顺序但更改索引,或者是否有技巧可以更快地重命名或简单地将 ni 调整为索引?

4

1 回答 1

1

假设您的 DataFrame 如下(带有 index '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% 左右。

于 2013-01-12T02:53:53.953 回答