Skip to main content
 首页 » 编程设计

python之重新索引而不改变顺序

2025年05月04日8zengkefu

我有以下数据框:

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 调整为索引?

请您参考如下方法:

假设您的 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%。