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.

  1. Para comenzar, crea un nuevo Jupyter Notebooks, puedes usar Google Colab o la notebook de tu preferencia que estés utilizando para este curso.

  2. Carga el DataFrame que hemos usado en el curso:

df_books = pd.read_csv('bestsellers with categories.csv',sep=',',header=0)
  1. Explóralo viendo sus primeras 5 filas:
df_books.head()
  1. Aplica pivot_table:
df_books.pivot_table(index='Author',columns='Genre',values='User Rating')
image5.png

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.

image4.png

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.

  1. 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.

image6.png

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.

  1. Para ello ejecuta la siguiente línea en tu Jupyter Notebook:
df_books[['Name','Genre']].head(5)
image2.png
  1. Aplica melt de la siguiente manera:
df_books[['Name','Genre']].head(5).melt()
image1.png

Ahora cada resultado de las dos columnas pasa a una fila de este modo a tipo llave:valor.

  1. En el siguiente ejemplo ejecutemos melt de esta manera:
df_books.melt(id_vars='Year',value_vars='Genre')
image3.png

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.

Aportes 7

Preguntas 2

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

algo muy similar a la pivot_table son las tablas din√°micas utilizadas en las hojas de calculo.

Wow!! ya con esto se empieza a ver m√°s del potencial de estas herramientas

Pivot

Un parámetro intenresante de esta función es el fill_value: el cual nos permitirá determinar con que contenido queremos visualizar los valores NaN, para este ejemplo uso el caracter " - " :

Melt

En melt podemos adicionalmente con par√°metros determinar el nombre de nuestras columnas usando:

  • var_name='nombre_columna_variables
  • value_name='nombre_columna_valores'

Cordial Saludo,

lo hice con una base propia

REMISION variable value
0 '208010808396 CLIENTE 'RYMCO MEDICAL S.A.S
1 '276020041637 CLIENTE 'CARVAJAL EDUCACION S.A.S.
2 '276020041638 CLIENTE 'CARVAJAL EDUCACION S.A.S.
3 '276020041639 CLIENTE 'CARVAJAL EDUCACION S.A.S.
4 '276020041640 CLIENTE 'CARVAJAL EDUCACION S.A.S.

La verdad es que estas herramientas son de gran ayuda en el an√°lisis de datos y sobre todo con grande vol√ļmenes de datos, que es en donde Excel hace ‚Äúaguas‚ÄĚ.

Hay 2 formas de generar el inverso de MELT. Una es usando PIVOT y otra PIVOT_TABLE.
https://stackoverflow.com/questions/22127569/opposite-of-melt-in-python-pandas