Pivot y Melt
Clase 22 de 24 • Curso de Manipulación y Transformación de Datos con Pandas y NumPy
Hola, te doy la bienvenida a la clase de pivot_table y melt, dos funciones que sirven para cambiar la estructura de nuestro DataFrame de acuerdo a nuestras necesidades.
pivot_table
Esta función puede traer recuerdos a las personas interesadas en el mundo del SQL, ya que Oracle, PostgreSQL y otros motores de bases de datos la tienen implementada desde hace muchos años. Pivot, básicamente, transforma los valores de determinadas columnas o filas en los índices de un nuevo DataFrame, y la intersección de estos es el valor resultante.
Entiendo que esto puede sonar algo confuso, pero no te preocupes, todo queda mucho más claro con un ejemplo.
-
Para comenzar, crea un nuevo Jupyter Notebooks, puedes usar Google Colab o la notebook de tu preferencia que estés utilizando para este curso.
-
Carga el DataFrame que hemos usado en el curso:
df_books = pd.read_csv('bestsellers with categories.csv',sep=',',header=0)
- Explóralo viendo sus primeras 5 filas:
df_books.head()
- Aplica
pivot_table
:
df_books.pivot_table(index='Author',columns='Genre',values='User Rating')
Como resultado, los valores de Author
pasan a formar el índice por fila y los valores de Genre
pasan a formar parte de los índices por columna, y el User Rating
se mantiene como valor.
Por supuesto, para este caso, un Author
suele tener un solo género literario, así que no es una transformación muy útil, pero veamos si podemos lograr algo mejor.
- Ejecuta la siguiente variación:
df_books.pivot_table(index='Genre',columns='Year', values='User Rating',aggfunc='sum')
En este caso tenemos por cada género, la suma a lo largo de los años. Esto es mucho más interesante, ¿verdad? La mejor noticia es que no solo podemos obtener la suma, también podemos obtener la media, la desviación estándar, el conteo, la varianza, etc. Únicamente con cambiar el parámetro aggfunc
que traduce función de agrupamiento.
melt
El método melt toma las columnas del DataFrame y las pasa a filas, con dos nuevas columnas para especificar la antigua columna y el valor que traía.
Por ejemplo, simplemente al imprimir las cinco primeras filas del DataFrame con las columnas de Name
y Genre
se tiene este resultado.
- Para ello ejecuta la siguiente línea en tu Jupyter Notebook:
df_books[['Name','Genre']].head(5)
- Aplica melt de la siguiente manera:
df_books[['Name','Genre']].head(5).melt()
Ahora cada resultado de las dos columnas pasa a una fila de este modo a tipo llave:valor.
- En el siguiente ejemplo ejecutemos melt de esta manera:
df_books.melt(id_vars='Year',value_vars='Genre')
Simplemente, podemos seleccionar las columnas que no quiero hacer melt
usando el parámetro id_vars
. Para este caso Year
y también la única columna que quiero aplicar el melt
, para este caso Genre
con la propiedad value_vars
.
Hemos conocido pivot y melt, dos herramientas muy útiles para manipular nuestros DataFrames.
Te espero en la siguiente clase donde conoceremos cómo utilizar Apply.