2015-12-30 59 views
0

如果第一個索引是整數,我在使用熊貓MultiIndex時遇到了問題。 我找不到這個問題,所以也許我在這裏做錯了什麼?查詢帶有多指數第一級整數的大熊貓數據框

我用熊貓版本 '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

使用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 

對於九真奇怪爲什麼它不能從docs因爲工作:

然而,當軸是基於整數的,僅基於標籤的訪問而不支持位置訪問ted 因此,在這種情況下,通常更好的做法是明確並使用.iloc或.loc。

你的索引值是整數所以他們應該被分析爲標籤:

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

但他們建議使用loc在這種情況下,要更加明確。

+0

謝謝安東,但你知道爲什麼它與整數不同嗎?在我看來,這很令人困惑...... –

+0

@ChristophDiefenthal只有當索引是基於整數的時候,'.ix'才能處理標籤。這確實是令人困惑的,也是創造「loc」和「iloc」動機的源泉。 –

+0

@PaulH:我看到 - 所以'.ix'可以很好地處理data = pd.DataFrame(... index = [1,1,1,1,2,2,2,2,3,3]) '但不適用於MultiIndex。我們是否應該使用'.ix'? –