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

Ame*_*ina 20 python numpy pandas

lexsort_depth多索引数据帧究竟是什么?为什么必须对索引进行排序?

例如,我注意到,在手动构建包含df三个级别的列的多索引数据框之后,如果我尝试执行此操作:

idx = pd.IndexSlice
df[idx['foo', 'bar']]
Run Code Online (Sandbox Code Playgroud)

我明白了:

KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)'
Run Code Online (Sandbox Code Playgroud)

而在这一点上,df.columns.lexsort_depth0

但是,如果我这样做,按此处此处的建议:

df = df.sortlevel(0,axis=1)
Run Code Online (Sandbox Code Playgroud)

然后横截面索引工作.为什么?究竟是什么lexsort_depth,为什么排序sortlevel修复这种类型的索引?

Jef*_*eff 20

lexsort_depth是词法排序的多索引的级别数.也就是说,以abc-1-2-3顺序(正常排序顺序).

因此,如果多索引未排序,则元素索引起作用,但查找可能会慢得多(在0.15.2中,这将显示PerformanceWarning执行这些类型的查找,请参阅此处

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

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

是执行操作的代码.