lexsort_depth多索引数据框的确切含义是什么?为什么必须对索引进行排序?
lexsort_depth
例如,我注意到df,如果我尝试这样做,则在手动构建具有按三个级别组织的列的多索引数据框之后:
df
idx = pd.IndexSlice df[idx['foo', 'bar']]
我得到:
KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)'
在这一点上,df.columns.lexsort_depth是0
df.columns.lexsort_depth
0
但是, 如果我这样做,请按照此处的建议进行操作:
df = df.sortlevel(0,axis=1)
然后横截面索引就可以了。为什么?究竟是什么lexsort_depth,以及为什么使用排序来sortlevel修复这种类型的索引?
sortlevel
lexsort_depth 是按词法排序的多索引的级别数。即,以abc-1-2-3顺序(正常排序顺序)进行。
因此,如果未对多索引进行排序,则元素索引 将 起作用,但是查找可能会慢一些(在0.15.2中,这将显示PerformanceWarning用于进行此类查找的a,请参见此处
PerformanceWarning
一般而言,排序是个好主意的原因是,pandas能够使用基于哈希的索引来独立于该级别找出特定级别中的位置。; 那么您可以使用这些索引器找到最终位置。
熊猫np.searchsorted在排序时会利用它们来查找这些位置。如果未排序,则必须回退到一些不同的(较慢的)方法。
np.searchsorted
这是执行此操作的代码。