小编典典

多索引数据框的lexsort_depth到底是什么?

python

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

但是, 如果我这样做,请按照此处的建议进行操作:

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

然后横截面索引就可以了。为什么?究竟是什么lexsort_depth,以及为什么使用排序来sortlevel修复这种类型的索引?


阅读 225

收藏
2020-12-20

共1个答案

小编典典

lexsort_depth 是按词法排序的多索引的级别数。即,以abc-1-2-3顺序(正常排序顺序)进行。

因此,如果未对多索引进行排序,则元素索引
起作用,但是查找可能会慢一些(在0.15.2中,这将显示PerformanceWarning用于进行此类查找的a,请参见此处

一般而言,排序是个好主意的原因是,pandas能够使用基于哈希的索引来独立于该级别找出特定级别中的位置。; 那么您可以使用这些索引器找到最终位置。

熊猫np.searchsorted在排序时会利用它们来查找这些位置。如果未排序,则必须回退到一些不同的(较慢的)方法。

是执行操作的代码。

2020-12-20