2

私は次の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を適応させるトリックがありますか?

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 に答える