reset_index index iloc groupby example columns python numpy pandas

python - index - ¿Qué es exactamente el lexsort_depth de un Dataframe de múltiples índices?



rename columns pandas (1)

¿Qué es exactamente el lexsort_depth de un lexsort_depth de lexsort_depth de múltiples índices? ¿Por qué tiene que ser ordenado para la indexación?

Por ejemplo, he notado que, después de construir manualmente un df datos de múltiples índices con columnas organizadas en tres niveles, si intento hacerlo:

idx = pd.IndexSlice df[idx[''foo'', ''bar'']]

Yo obtengo:

KeyError: ''Key length (2) was greater than MultiIndex lexsort depth (0)''

y en este punto, df.columns.lexsort_depth es 0

Sin embargo, si lo hago, como se recomienda here y here :

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

entonces la indexación de la sección transversal funciona. ¿Por qué? ¿Qué es exactamente lexsort_depth y por qué la clasificación con sortlevel corrige este tipo de indexación?


lexsort_depth es el número de niveles de un índice múltiple que se clasifican de forma léxica. Es decir, en un orden abc-1-2-3 (orden normal).

Por lo tanto, la indexación de elementos funcionará si no se clasifica un índice múltiple, pero las búsquedas pueden ser un poco más lentas (en 0.15.2, esto mostrará una Advertencia de PerformanceWarning para hacer este tipo de búsquedas, vea here

La razón por la que una buena idea de clasificación en general es que los pandas son capaces de usar la indexación basada en hash para averiguar dónde se encuentra la ubicación en un nivel particular independientemente del nivel. ; luego puede usar estos indexadores para encontrar las ubicaciones finales.

Pandas aprovecha np.searchsorted para encontrar estas ubicaciones cuando está ordenado. Si no está ordenado, entonces tienes que recurrir a algunos métodos diferentes (más lentos).

here está el código que hace esto.