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.