多索引Dataframe的lexsort_depth究竟是什么?

时间:2014-11-25 00:26:37

标签: python numpy pandas

多索引数据框的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进行排序会修复此类索引?

1 个答案:

答案 0 :(得分:18)

lexsort_depth 是词法排序的多索引的级别数。也就是说,按照a-b-c-1-2-3顺序(正常排序顺序)。

因此,如果多索引未排序,则元素索引工作,但查找可能会慢得多(在0.15.2中,这将显示PerformanceWarning这些查找,请参阅here

排序通常是一个好主意的原因是pandas能够使用基于散列的索引来确定位置在特定级别中的位置。 ;然后你可以使用这些索引器来查找最终位置。

Pandas利用np.searchsorted在排序时找到这些位置。如果它没有排序,那么你必须回退到一些不同的(较慢的)方法。

here是执行此操作的代码。