在 Panda DataFrame 对象中重新定义索引

我试图重新索引一个熊猫 DataFrame对象,像这样,

From:
a   b   c
0   1   2   3
1  10  11  12
2  20  21  22


To :
b   c
1   2   3
10  11  12
20  21  22

如下所示,我正在做这件事,但是我得到了一个错误的答案。有什么线索吗?

>>> col = ['a','b','c']
>>> data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)
>>> data
a   b   c
0   1   2   3
1  10  11  12
2  20  21  22
>>> idx2 = data.a.values
>>> idx2
array([ 1, 10, 20], dtype=int64)
>>> data2 = DataFrame(data,index=idx2,columns=col[1:])
>>> data2
b   c
1   11  12
10 NaN NaN
20 NaN NaN

知道为什么会这样吗?

137461 次浏览

Why don't you simply use set_index method?

In : col = ['a','b','c']


In : data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)


In : data
Out:
a   b   c
0   1   2   3
1  10  11  12
2  20  21  22


In : data2 = data.set_index('a')


In : data2
Out:
b   c
a
1    2   3
10  11  12
20  21  22

If you don't want 'a' in the index

In :

col = ['a','b','c']


data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)


data

Out:

    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22

In :

data2 = data.set_index('a')

Out:

     b   c
a
1    2   3
10  11  12
20  21  22

In :

data2.index.name = None

Out:

     b   c
1   2   3
10  11  12
20  21  22

To avoid index name with a single-liner, you can use set_index('a') with rename_axis(None)

In [8]: data.set_index('a').rename_axis(None)
Out[8]:
b   c
1    2   3
10  11  12
20  21  22

Details

In [9]: data
Out[9]:
a   b   c
0   1   2   3
1  10  11  12
2  20  21  22