使用第一级多索引

时间:2015-12-30 07:25:23

标签: python pandas multi-index

如果第一个索引是整数,我在使用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

1 个答案:

答案 0 :(得分:1)

使用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而无法正常工作,这很奇怪:

  

但是,当轴基于整数时,仅支持基于标签的访问而非位置访问   因此,在这种情况下,通常最好是明确并使用.iloc或.loc。

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

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

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