多索引pandas数据帧子集分配

时间:2013-12-03 23:22:24

标签: python pandas multi-index

这里的第一个问题是0.12中的错误,但在0.13.0rc1中已修复。 这里的第二个问题并不是固定的,至少是不一致的。

这两种情况正常:

a = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'B'],[1, 2]])
b = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'B']])
b[['a']]=a[['a']]

a = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'b'],[1, 2]])
b = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'b'],[1, 2]])
b[['a']]=a[['a']]

然而,

a = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'B'],[1, 2]])
b = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'B'],[1, 2]])
b[['a']]=a[['a']]

生成AttributeError: _ref_locs

类似情况:

b = DataFrame(np.zeros((2, 2)),columns=[['a', 'c'],[1,2]])
b.drop('a', axis=1)

工作正常,但

b = DataFrame(np.zeros((2, 2)),columns=[['a', 'C'],[1,2]])
b.drop('a', axis=1)

给出AttributeError:'FrozenNDArray'对象没有属性'start'

1 个答案:

答案 0 :(得分:3)

由于您未指定,您可能正在使用pandas< = 0.12

这适用于0.13rc1(即将发布的最终版本),并且是0.12

中的错误

您从上面举例(为清晰起见使用位置参考)

In [3]: a = DataFrame(np.arange(0,4).reshape((2,2)),columns=[['a', 'B'],[1, 2]])

In [4]: b = DataFrame(np.arange(4,8).reshape((2,2)),columns=[['a', 'B'],[1, 2]])

In [5]: a
Out[5]: 
   a  B
   1  2
0  0  1
1  2  3

[2 rows x 2 columns]

In [6]: b
Out[6]: 
   a  B
   1  2
0  4  5
1  6  7

[2 rows x 2 columns]

In [7]: b[['a']] = a[['a']]

In [8]: b
Out[8]: 
   a  B
   1  2
0  0  5
1  2  7

[2 rows x 2 columns]

第二部分不是错误;而不是你没有完全指定标签(你只是指定一个单一级别),而是需要指定完整的标签(通过元组):

In [12]: b = DataFrame(np.zeros((2, 2)),columns=[['a', 'C'],[1,2]])

In [13]: b.drop([('a',1)],axis=1)
Out[13]: 
   C
   2
0  0
1  0

[2 rows x 1 columns]