我正在尝试重新索引pandas 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
知道为什么会这样吗?
答案 0 :(得分:186)
为什么不简单地使用set_index
方法?
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
答案 1 :(得分:5)
如果您不想在索引中使用'a'
在:
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
在:
data2 = data.set_index('a')
输出:
b c
a
1 2 3
10 11 12
20 21 22
在:
data2.index.name = None
输出:
b c
1 2 3
10 11 12
20 21 22
答案 2 :(得分:0)
为了避免索引名称为单行,您可以使用 set_index('a')
和 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
详情
In [9]: data
Out[9]:
a b c
0 1 2 3
1 10 11 12
2 20 21 22