Подтвердить что ты не робот

Что такое lexsort_depth мультииндекса Dataframe?

Что такое lexsort_depth многоиндексного фрейма? Почему его нужно сортировать для индексирования?

Например, я заметил, что после ручного создания мультииндекса dataframe 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 = df.sortlevel(0,axis=1)

то работает индексация поперечного сечения. Зачем? Что такое lexsort_depth, и почему сортировка с помощью sortlevel исправляет этот тип индексирования?

4b9b3361

Ответ 1

lexsort_depth - это количество уровней мультииндекса, которые сортируются лексически. То есть в порядке a-b-c-1-2-3 (обычный порядок сортировки).

Таким образом, индексация элементов будет работать, если мультииндекс не отсортирован, но поиск может быть довольно медленным (в 0.15.2 это покажет PerformanceWarning для выполнения этих видов поиска, см. здесь

Причина в том, что сортировка в целом хорошая идея заключается в том, что pandas может использовать индексирование на основе хешей, чтобы выяснить, где местоположение находится на определенном уровне независимо от уровня.; то вы можете использовать эти индексаторы для поиска конечных местоположений.

Pandas использует np.searchsorted, чтобы найти эти местоположения при его сортировке. Если он не отсортирован, тогда вам нужно отступить к другим (более медленным) методам.

здесь - это код, который делает это.