Selección con índices y etiquetas simultáneamente

En ocasiones nos encontraremos con que resultaría de utilidad poder realizar selecciones mezclando etiquetas e índices, y los métodos vistos, loc e iloc, solo permiten el uso de etiquetas o de índices, respectivamente. Para poder mezclar ambos tipos de referencias podemos recurrir a los métodos pandas.Index.get_loc y pandas.Index.get_indexer, métodos asociados a los índices de un dataframe:

El primero, get_loc, devuelve el índice de la etiqueta que se adjunte como parámetro. El segundo, get_indexer, devuelve un array con los índices de las etiquetas que se adjunten en forma de lista como parámetro. Por ejemplo, partimos del siguiente dataframe:

Selección de datos en DataFrames con índices y etiquetas simultáneamente

Si aplicamos los métodos comentados al índice de columnas haciendo referencia a etiquetas de columnas, obtenemos los siguientes resultados:

Selección de datos en DataFrames con índices y etiquetas simultáneamente

En el primer caso hemos pasado la etiqueta "B" y el método ha devuelto su índice (1). En el segundo caso hemos pasado una lista de etiquetas y hemos obtenido un array con sus índices.

Si ejecutamos estos métodos en el índice de filas:

Selección de datos en DataFrames con índices y etiquetas simultáneamente

...obtenemos resultados semejantes.

Ahora que sabemos cómo convertir etiquetas en sus índices equivalentes, podemos seleccionar datos de un dataframe mezclando etiquetas e índices si convertimos las etiquetas y utilizamos el método iloc ya visto. Por ejemplo, si quisiéramos extraer del anterior dataframe el dato que ocupa la fila "c" y la columna de índice 2, podríamos conseguirlo del siguiente modo:

df.iloc[df.index.get_loc("c"), 2]

Selección de datos en DataFrames con índices y etiquetas simultáneamente

O si deseásemos obtener de las filas 5 y 3 (en este orden) los valores correspondientes a las columnas C y A (en este orden), podríamos hacerlo con la siguiente expresión:

df.iloc[[5, 3], df.columns.get_indexer(["C", "A"])]

Selección de datos en DataFrames con índices y etiquetas simultáneamente