2014-11-25 51 views
13

什麼是多索引數據幀的lexsort_depth?爲什麼必須對索引進行排序?多索引數據框的lexsort_depth究竟是什麼?

舉例來說,我已經注意到了,手動建立多指標數據幀df在三個層次組織,列之後,如果我嘗試做:

idx = pd.IndexSlice 
df[idx['foo', 'bar']] 

我得到:

KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)' 

,並在這一點上,df.columns.lexsort_depth0

然而,,如果我這樣做,建議herehere

df = df.sortlevel(0,axis=1) 

然後橫截面索引原理。爲什麼? lexsort_depth究竟是什麼,以及爲什麼使用sortlevel進行排序修復了這種類型的索引?

回答

11

lexsort_depth是是詞法排序的多指數的等級的數目。也就是說,以a-b-c-1-2-3的順序(正常的排序順序)。

所以元素的索引工作,如果一個多指標未排序,但查找可能相當慢一點(在0.15.2,這將顯示一個PerformanceWarning做這些類型的查詢,請參閱here

一般來說,一個好主意排序的原因是熊貓能夠使用基於散列的索引來確定該級別的位置在哪個位置獨立於某個特定級別;然後您可以使用這些索引器來查找最終的

熊貓利用np.searchsorted找到這些位置時,如果它的排序排序,那麼你必須回退到一些不同的(較慢)方法。

here是這樣做的代碼。