Está en la página 1de 35

Módulo

Obtención y preparación de datos

Aprendizaje Esperado 5
Aprendizaje Esperado 5
Indexación jerárquica

Aprendizaje Esperado 5
Aplica técnicas de unión, combinación y redimensionamiento de
estructuras de datos utilizando librerías de Python para el reacomodo de
datos.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

5. Indexación jerárquica

Contexto
La indexación jerárquica, también conocida como indexación multinivel o
MultiIndex en el contexto de pandas, es una técnica que permite gestionar
y organizar datos en un DataFrame con múltiples niveles de índices, tanto
para las filas como para las columnas. Esta funcionalidad proporciona una
estructura más compleja para la representación de datos tabulares, lo que
es especialmente útil cuando se trabaja con datos multidimensionales o
datos que requieren una organización más detallada. La indexación
jerárquica permite realizar operaciones avanzadas de acceso, selección y
análisis de datos de manera eficiente, lo que la convierte en una
herramienta esencial en el análisis de datos y la manipulación de datos
complejos.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

ÍNDICES

Utilización de multi-índices en series y


dataframes
La indexación jerárquica / multinivel es muy interesante, ya que abre la
puerta a un análisis y manipulación de datos bastante sofisticados,
especialmente para trabajar con datos de dimensiones superiores. En
esencia, le permite almacenar y manipular datos con un número arbitrario
de dimensiones en estructuras de datos de menor dimensión como
Series(1d) y DataFrame(2d).

Podemos crear un multi-índice de cuatro formas distintas:

● A partir de una lista de arrays, usando el método


pd.MultiIndex.from_arrays()

● A partir de un array de tuplas, usando el método


pd.MultiIndex.from_tuples()

● A partir del producto cartesiano de los valores de dos iterables, usando


el método pd.MultiIndex.from_product()

● A partir de un DataFrame, usando el método


pd.MultiIndex.from_frame()

El uso de un Multi-Index puede simplificar la manipulación de datos con


múltiples dimensiones, proporcionando una forma estructurada de
acceder a los datos en función de diferentes niveles de etiquetas. Puedes
realizar selecciones y operaciones específicas en datos en función de
varios criterios.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Ejemplo de arrays:

Ejemplo de tuplas:

Ejemplo producto:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

En este ejemplo, el Multi-Index se crea utilizando


pd.MultiIndex.from_product(), que combina los elementos de las listas
niveles_externos y niveles_internos para generar las etiquetas del índice
con dos niveles.

Ejemplo de frames:

Reordenamiento de niveles
El reordenamiento de niveles en un DataFrame o una Serie con MultiIndex
es la capacidad de cambiar el orden de los niveles de índice jerárquico.
Esto puede ser útil para cambiar la jerarquía de los datos y reorganizarlos
según tus necesidades específicas de análisis. Pandas proporciona
métodos para realizar este reordenamiento, como swaplevel() y
reorder_levels().

swaplevel(): Este método intercambia dos niveles de índice. Puedes


especificar cuáles niveles deseas intercambiar utilizando los nombres o
las etiquetas de los niveles.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

reorder_levels(): Este método te permite reorganizar los niveles de índice


en el orden que desees. Puedes proporcionar una lista de números que
representan el nuevo orden de los niveles.

Supongamos el siguiente DataFrame:

Con salida:

Y ahora reordenamos:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

La salida:

Sumario de estadísticas por nivel


El "Sumario de estadísticas por nivel" se refiere a la capacidad de calcular
estadísticas descriptivas para un conjunto de datos en función de uno o
más niveles de un índice jerárquico en un DataFrame o Serie con
MultiIndex en pandas. Esto significa que puedes calcular estadísticas
específicas para subconjuntos de datos basados en las categorías o grupos
definidos por los niveles del índice jerárquico.

Pandas proporciona la función groupby() para realizar este tipo de


operaciones. Cuando se usa groupby() en un DataFrame o Serie con
MultiIndex, puedes agrupar los datos por uno o más niveles de índice y
luego calcular estadísticas de resumen en esos grupos utilizando
funciones como mean(), sum(), count(), min(), max(), entre otras.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Por ejemplo, supongamos que tienes un DataFrame con un MultiIndex que


contiene datos de ventas por región y mes. Puedes utilizar groupby() para
calcular la suma de las ventas mensuales para cada región:

Ahora calculamos la suma de las ventas mensuales:

En el ejemplo, utilizamos groupby() para agrupar los datos por la columna


'Región' y luego calculamos la suma de las ventas mensuales para cada
región específica. Esto proporciona un resumen de estadísticas por nivel,
lo que puede ser valioso para el análisis de datos jerárquicos.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Utilización de columnas para construir índices


Normalmente, en un Pandas DataFrame, tenemos números de serie desde
0 hasta la longitud del objeto como índice por defecto. También podemos
hacer que una columna específica de un dataframe sea su índice. Para ello,
podemos usar el set_index() proporcionado en pandas, y también
podemos especificar el índice de la columna mientras importamos un
dataframe de un archivo Excel o CSV. Esto es útil cuando tienes
información que debería actuar como un índice, pero inicialmente no se
especificó como tal.

Pandas proporciona la función set_index() para realizar esta operación.


Puedes seleccionar una o más columnas del DataFrame y establecerlas
como índice, lo que crea un nuevo DataFrame con una estructura
jerárquica si se eligen múltiples columnas. Esto facilita la indexación y la
organización de los datos.

set_index() puede aplicarse a listas, series o cuadros de datos para alterar


su índice. Para los Dataframes, set_index() también puede hacer múltiples
columnas como su índice.

Ejemplo:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Comparación de la salida original con la salida con nuevo índice:

En este ejemplo, la columna 'Ciudad' se establece como índice, lo que


facilita el acceso a los datos utilizando los nombres de las ciudades como
etiquetas de fila.

También podemos setear varias columnas como índice al mismo tiempo:

En este ejemplo, hemos establecido las columnas 'Ciudad' y 'Estado' como


índices, lo que crea un índice jerárquico en el DataFrame. Esto significa
que puedes acceder a los datos utilizando combinaciones de valores de
'Ciudad' y 'Estado' como etiquetas de fila.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Otra opción es usando el parámetro index_col en read_excel o read_csv


para establecer la columna como índice.

Mientras leemos un DataFrame de un archivo Excel o CSV, podemos


especificar la columna que queremos como el índice del DataFrame.

También puedes especificar múltiples columnas como índices


proporcionando una lista de nombres de columnas:

Combinación y Merge de datos


La combinación y fusión de datos son operaciones esenciales en el análisis
de datos cuando trabajas con múltiples conjuntos de datos. Estas
operaciones te permiten unir o combinar datos de diferentes fuentes en
un único conjunto de datos para facilitar el análisis. En pandas, existen
varias funciones para lograr esto, siendo las principales:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Estas funciones son esenciales cuando trabajas con múltiples fuentes de


datos y necesitas combinar, unir o fusionar los datos para realizar análisis
más avanzados. La elección de la función adecuada dependerá de tu
situación y de cómo deseas combinar los datos.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Para este caso, nos vamos a centrar en dos: concat y merge

La función pandas.concat es la responsable de concatenar dos o más


DataFrames (y de todas las estructuras proveídas por pandas) a lo largo de
un eje, con soporte a lógica de conjuntos a la hora de gestionar etiquetas
en ejes no coincidentes.

En este caso, si vemos los DataFrames originales:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Y si los comparamos con el DataFrame concatenado:

El método append

El método pandas.DataFrame.append es un atajo de la función concat que


ofrece funcionalidad semejante pero limitada: no permite especificar el
eje de concatenación (siempre es el eje 0) ni el tipo de "join" (siempre es
tipo "Outer").

La función merge

La función pandas.merge nos permite realizar "joins" entre tablas. El join


es realizado sobre las columnas o sobre las filas. En el primer caso, las
etiquetas de las filas son ignoradas. En cualquier otro caso (joins
realizados entre etiquetas de filas, o entre etiquetas de filas y de
columnas), las etiquetas de filas se mantienen.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

En este ejemplo, estamos utilizando la columna "key" como clave de unión


para fusionar los DataFrames left y right. La opción how='inner' significa
que solo se incluirán las filas que tengan valores comunes en ambas
tablas:

OPERACIONES

Operaciones join al estilo base de datos en un


dataset.
El tipo más común de unión se llama inner join (unión interna). Una
combinación interna combina dos DataFrames basados en una clave de
unión y devuelve un nuevo DataFrame que contiene solo aquellas filas
que tienen valores coincidentes entre los dos DataFrames originales.

Las uniones internas producen un DataFrame que contiene solo filas


donde el valor que es el subjecto de la unión existe en las dos tablas:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

La función principal para realizar un "join" es merge(), que proporciona


una amplia flexibilidad para definir cómo se realizará la unión.

Ejemplo de Inner Join:

En este ejemplo, realizamos un "inner join" entre df1 y df2 utilizando la


columna 'clave' como clave de unión. El resultado contendrá solo las filas
con claves que existan en ambos DataFrames.

Ejemplo Left Join:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

En este caso, realizamos un "left join" y el resultado incluirá todas las filas
de df1 y las filas coincidentes de df2. Las filas de df2 que no tienen
coincidencias se llenarán con valores NaN en las columnas
correspondientes.

Puedes utilizar diferentes tipos de "join" (inner, outer, left, right) y


especificar las columnas de unión utilizando los argumentos how y on de
la función merge().

Merge sobre índices


La función merge() de pandas permite realizar operaciones de "merge"
utilizando índices en lugar de columnas como claves de unión.

Cuando se fusionan dos DataFrames en el índice, el valor de los


parámetros left_index y right_index de la función merge() debe ser True.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

En este ejemplo, estamos realizando un "merge" sobre los índices de df1


y df2. Utilizamos los argumentos left_index=True y right_index=True para
indicar que queremos realizar el "merge" sobre los índices. El resultado
contendrá solo las filas con índices que existan en ambos DataFrames.

También puedes especificar qué tipo de "join" deseas realizar (inner, outer,
left, right) utilizando el argumento how, de manera similar a los ejemplos
anteriores. El resultado será un nuevo DataFrame que combina los datos
de ambos DataFrames utilizando los índices como claves de unión.

Ejercicio guiado
Para este ejercicio, crearemos dos DataFrames de ejemplo que compartirán una
columna común que usaremos como clave de unión.

import pandas as pd

# Crear el primer DataFrame

df1 = pd.DataFrame({

'clave': ['A', 'B', 'C', 'D'],

'valor_df1': [1, 2, 3, 4]

})

# Crear el segundo DataFrame

df2 = pd.DataFrame({

'clave': ['B', 'D', 'E', 'F'],

'valor_df2': [5, 6, 7, 8]

})

print("DataFrame 1:")

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

print(df1)

print("\nDataFrame 2:")

print(df2)

Usaremos la función merge() de Pandas para realizar un inner join, especificando la


columna clave sobre la que queremos unir los DataFrames.

# Realizar un inner join

df_inner_join = pd.merge(df1, df2, on='clave', how='inner')

print("Resultado del Inner Join:")

print(df_inner_join)

El resultado del inner join será un nuevo DataFrame que contiene solo las filas con claves
que están presentes en ambos DataFrames originales.

Concatenación sobre un eje


La concatenación en pandas se refiere a la combinación de DataFrames a
lo largo de un eje, ya sea horizontal (a lo largo de las columnas) o vertical
(a lo largo de las filas). Para llevar a cabo la concatenación, puedes utilizar
la función concat().

Ejemplo de Concatenación Vertical

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

En este ejemplo, pd.concat([df1, df2], axis=0) realiza la concatenación


vertical de df1 y df2, lo que da como resultado un nuevo DataFrame que
combina las filas de ambos DataFrames:

Ejemplo de Concatenación Horizontal

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

En este ejemplo, pd.concat([df1, df2], axis=1) realiza la concatenación


horizontal de df1 y df2, lo que da como resultado un nuevo DataFrame
que combina las columnas de ambos DataFrames.

La función concat() te permite especificar el eje a lo largo del cual deseas


concatenar utilizando el argumento axis. Puedes concatenar más de dos
DataFrames proporcionando una lista de DataFrames como primer
argumento.

Combinación de datos traslapados


Es la combinación de dos DataFrames basada en alguna condición o
superposición de datos entre ellos. Esto se puede lograr utilizando las
funciones merge() o join().

Supongamos que tenemos dos DataFrames, df1 y df2, y queremos


combinarlos en función de una columna común, como un identificador
único:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

En este ejemplo, estamos combinando df1 y df2 utilizando la columna 'ID'


como clave de combinación. El argumento on='ID' especifica la columna
sobre la cual se realiza la combinación (en este caso, los elementos
traslapados son los de ID=3 e ID=4). El argumento how='inner' indica que
queremos realizar una combinación interna, lo que significa que solo se
incluirán las filas que tengan un valor común en la columna 'ID' en ambos
DataFrames. El resultado contendrá las columnas 'ID', 'Nombre' y 'Edad'.

Ejercicio guiado
Vamos a crear dos DataFrames con una columna común que actuará como
un identificador único.

# Crear el primer DataFrame

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

import pandas as pd

df1 = pd.DataFrame({

'identificador': ['X', 'Y', 'Z'],

'valor_df1': [1, 2, 3]

})

# Crear el segundo DataFrame

df2 = pd.DataFrame({

'identificador': ['Y', 'Z', 'W'],

'valor_df2': [4, 5, 6]

})

print("DataFrame 1:")

print(df1)

print("\nDataFrame 2:")

print(df2)

Utiliza merge() para combinar los DataFrames basándose en la columna


'identificador'. La función merge() se utiliza para realizar operaciones de tipo
join similares a las de las bases de datos SQL.

# Combinar df1 y df2 usando un 'inner join' por defecto

df_combinado = pd.merge(df1, df2, on='identificador')

print("DataFrame Combinado (Inner Join):")

print(df_combinado)

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Investiga cómo realizar otros tipos de joins como 'left', 'right' y 'outer' para
ver cómo manejan los datos traslapados y los valores faltantes.

# Combinar df1 y df2 usando un 'left join'

df_left_join = pd.merge(df1, df2, on='identificador', how='left')

print("DataFrame Combinado (Left Join):")

print(df_left_join)

# Combinar df1 y df2 usando un 'right join'

df_right_join = pd.merge(df1, df2, on='identificador', how='right')

print("DataFrame Combinado (Right Join):")

print(df_right_join)

# Combinar df1 y df2 usando un 'outer join'

df_outer_join = pd.merge(df1, df2, on='identificador', how='outer')

print("DataFrame Combinado (Outer Join):")

print(df_outer_join)

El método join() es otra forma de combinar DataFrames basada en índices o


columnas que se cruzan. Para usar join(), los DataFrames no deben tener
columnas superpuestas, aparte de la clave de unión.

# Configurar la columna 'identificador' como índice en ambos


DataFrames para el join

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

df1_indexed = df1.set_index('identificador')

df2_indexed = df2.set_index('identificador')

# Combinar df1 y df2 usando un 'inner join'

df_inner_join = df1_indexed.join(df2_indexed, how='inner')

print("DataFrame Combinado (Join - Inner):")

print(df_inner_join)

Redimensionamiento, Agrupamiento y Pivoteo


En pandas, las operaciones de redimensionamiento, agrupamiento y
pivoteo son fundamentales para reorganizar y estructurar tus datos de
maneras útiles para el análisis.

Redimensionamiento (Reshape): Esta operación implica cambiar la forma


o la estructura de tu DataFrame. Algunas funciones clave para el
redimensionamiento son:

● stack() y unstack(): Estas funciones permiten cambiar la estructura de


un DataFrame ancho a largo o viceversa.
● melt(): Esta función se usa para deshacer columnas y transformar el
DataFrame de formato ancho a largo.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

● pivot(): Permite cambiar de un formato largo a uno ancho, creando una


nueva estructura basada en columnas específicas.

Agrupamiento (Grouping): El agrupamiento es esencial para realizar


operaciones agregadas en conjuntos de datos. Puedes agrupar filas de un
DataFrame en función de valores comunes en una o más columnas.
Algunas funciones de agrupamiento son:

● groupby(): Permite agrupar filas en función de una o más columnas y


aplicar funciones de agregación, como suma, promedio o conteo, a
cada grupo.
● agg(): Utilizado para aplicar múltiples funciones de agregación a
columnas específicas después de agrupar.

Pivoteo (Pivoting): Esta operación consiste en reorganizar tu DataFrame


para que las columnas se conviertan en índices y viceversa. Algunas
funciones relacionadas son:

● pivot(): Reorganiza un DataFrame utilizando una columna como


índice, otra como columnas y una tercera como valores.
● pivot_table(): Similar a pivot(), pero permite manejar
automáticamente valores duplicados o realizar agregaciones si es
necesario.

Redimensión de un dataframe
stack(): Convierte columnas en un índice, lo que transforma el DataFrame
de ancho a largo.

unstack(): Convierte un índice en columnas, transformando el DataFrame


de largo a ancho..

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Ejemplo:

melt(): La función melt() se utiliza para convertir un DataFrame de formato


ancho a largo, lo que puede ser útil cuando deseas transformar múltiples
columnas en una sola columna con etiquetas y valores.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

pivot(): La función pivot() se utiliza para cambiar un DataFrame de formato


largo a ancho. Puedes especificar columnas para usar como índice,
columnas para usar como encabezados de columna y columnas para los
valores.

Agrupación de datos
groupby y agg son las dos funciones para agrupar datos en pandas. Aquí
un par de ejemplos:

Agrupación y aplicando diferentes funciones de agregación

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Este ejemplo agrupa el DataFrame por la columna 'Ciudad' y luego aplica


diferentes funciones de agregación (suma para 'Ventas' y promedio para
'Beneficio') a cada grupo.

Aplicación de funciones personalizadas en la agrupación

Pivoteo “largo” a “ancho”


El pivoteo de "largo" a "ancho" en pandas implica reorganizar un
DataFrame que originalmente tiene una estructura larga, donde los datos
se almacenan en múltiples filas, en un formato más ancho, donde los datos
se organizan en columnas.

Supongamos que tenemos un DataFrame con datos de ventas en un


formato largo como este:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

El DataFrame original se vería así:

Para pivotearlo de "largo" a "ancho" de manera que los productos sean


columnas y las fechas sean los índices, podemos usar la función pivot de
la siguiente manera:

hemos pivoteado el DataFrame original para obtener un formato "ancho",


donde las columnas representan los productos y las filas representan las
fechas, lo que facilita el análisis de los datos en diferentes dimensiones.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Pivoteo “ancho” a “largo”


implica reorganizar un DataFrame que originalmente tiene una estructura
ancha, donde los datos se almacenan en múltiples columnas, en un
formato más largo, donde los datos se organizan en filas. Esto se hace
utilizando la función melt en pandas.

La salida original:

Para pivotearlo de "ancho" a "largo" y tener una columna adicional que


identifique los productos, podemos usar la función melt de la siguiente
manera:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

El resultado sería:

hemos pivotado el DataFrame original de "ancho" a "largo", donde cada


fila representa una combinación de fecha y producto, y la columna
"Producto" identifica el tipo de producto.

El pivoteo "ancho" a "largo" es común cuando se trabaja con datos donde


múltiples columnas representan mediciones para diferentes categorías o
variables, y se desea transformar estos datos en un formato más
manejable para análisis posteriores.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Referencias
● Living sun: pandas que coinciden en el nivel del índice jerárquico -
python, pandas, indexación
https://living-sun.com/es/python/689481-pandas-matching-on-
level-of-hierarchical-index-python-pandas-indexing.html

● Pandas: Merge, Join, Concatenate.


https://pandas.pydata.org/pandas-docs/stable/user_guide/
merging.html

● DelfStack: Fusionar Pandas Dataframe en el índice


https://www.delftstack.com/es/howto/python-pandas/merge-
dataframes-on-index-in-pandas/

● Youtube - Python Marathon: Python Listas Indexación


https://www.youtube.com/watch?v=2-uXLQbsHIA

● Youtube - Instituto de Informatica UACh: pandas avanzado –


MultiIndex
https://www.youtube.com/watch?v=bWjB4089EbA

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 5
Indexación jerárquica

Módulo
Obtención y Preparación de Datos

También podría gustarte