2016-08-01 648 views
4

我有一系列python系列的層次索引中x [1,2]和x [1] [2]有什麼區別?

x=pd.Series(np.random.random(16),index=[[1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4],['a','b','c','d','a','b','c','d','a','b','c','d','a','b','c','d']]) 

,看起來像這樣:

1 a -0.068167 
    b -1.036551 
    c -0.246619 
    d 1.318381 
2 a -0.119061 
    b 0.249653 
    c 0.819153 
    d 1.334510 
3 a 0.029305 
    b -0.879798 
    c 1.081574 
    d -1.590322 
4 a 0.620149 
    b -2.197523 
    c 0.927573 
    d -0.274370 
dtype: float64 

是什麼X [1, '一']和X [1] [ '一']之間的區別。它給了我相同的答案。我對內部的差異意味着什麼感到困惑?我什麼時候應該使用上述兩個索引?

+1

什麼庫提供這個'系列'對象? – zwol

+0

熊貓圖書館 – Kaushik

回答

2

這種解釋是從numpy docs,但是相信類似的事情在大熊貓發生(其內部使用numpy的,使用「索引」,以提供(可能)命名索引和底層基於整數的索引之間的映射) 。

所以注意,X [0,2] = X [0] [2]雖然第二殼體是效率較低的作爲新的臨時數組是,隨後通過2.

索引的第一索引之後創建

以下是您的系列的時間安排;第一種方法是更快的大約30倍:

In [79]: %timeit x[1, 'a'] 
100000 loops, best of 3: 8.46 µs per loop 

In [80]: %timeit x[1]['a'] 
1000 loops, best of 3: 274 µs per loop 
+1

這與numpy無關,因爲這是一個MultiIndex,所以熊貓是特定的;請更新答案,以免誤導 – Jeff

+0

@jeff我不會說它有沒有**與numpy做什麼?! – maxymoo

+1

使用NumPy數組,'x [1]'是一個視圖,性能差異會低得多。我認爲,對這個問題的正確回答需要更多熊貓專用的深入瞭解索引的功能。 – user2357112

1

x[1, 'a']的情況下,熊貓走的是1, 'a'爲元組(1, 'a')並返回對應於該索引(1, 'a')標籤系列值。

x[1]['a']的情況下,熊貓發現你在[]中傳遞的不是一個元組,它可以引用它的索引,因此最終表明它可能是對第一級元素的引用。 x[1]然後返回x的橫截面,我們試圖用['a']再次進行切片。

相關問題