在多索引的第一级中查询 pandas 具有整数的数据帧

query pandas dataframe with integer in first level of multiindex

如果第一个索引是整数,我在使用 pandas MultiIndex 时遇到问题。 我找不到这个问题,所以也许我在这里做错了什么?

我使用 pandas 版本 '0.16.2'

示例:

在:

data2 = pd.DataFrame(np.random.rand(10), 
                index = [['a','a','a','a','b','b','b','b','c','c'],
                         [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0]])
data2.ix[['b','c']]

输出:

            0
b 5  0.295579
  6  0.691801
  7  0.386504
  8  0.602777
c 9  0.269147
  0  0.029509

但是对于第一个索引级别的整数,它似乎不起作用:

data = pd.DataFrame(np.random.rand(10), 
                index = [[ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3], 
                         ['a','b','c','d','e','f','g','h','i','j']])
data.ix[[2,3]] 

输出:

        0
1 c  0.437728
  d  0.785359

使用loc代替ix:

data = pd.DataFrame(np.random.rand(10), 
                index = [[ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3], 
                         ['a','b','c','d','e','f','g','h','i','j']])
data.loc[[2,3]] 

In [264]: data.loc[[2,3]]
Out[264]: 
            0
2 e  0.846643
  f  0.200234
  g  0.298223
  h  0.766459
3 i  0.860181
  j  0.980182

对于 ix,奇怪的是为什么它不起作用,因为来自 docs:

However, when an axis is integer based, ONLY label based access and not positional access is supported Thus, in such cases, it’s usually better to be explicit and use .iloc or .loc.

您的索引值是整数,因此应将它们作为标签进行分析:

In [271]: data.index.levels[0]
Out[271]: Int64Index([1, 2, 3], dtype='int64') 

但他们建议在这种情况下使用 loc 以更加明确。