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.

...

Regístrate o inicia sesión para leer el resto del contenido.

Aportes 39

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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'

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

Debo decir que no quedé para nada contento con esta “clase” si es q se le puede llamar así. Se entiende 10mil veces mas cuando hace la clase a través de los videos, como ya lo venía haciendo, por qué cambiar a este formato ?

A mi parecer, no es acertado que se incluyan sólo textos como 1 clase cualquiera.

Este es un ejemplo de cómo suelo usar melt. Digamos que tengo una tabla con los locales (filas) y las ventas anuales (cols). Y quiero como resultado - tener 3 cols con Local, Año y Ventas.

import pandas as pd
data = {
    'Local': ['Local A', 'Local B', 'Local C'],
    #Ventas por año
    '2021': [100, 200, 300],
    '2022': [150, 250, 350],
    '2023': [200, 300, 400]
}
df = pd.DataFrame(data)

Luego convertimos a las 3 cols:

df.melt(id_vars=['Local'],
        var_name='Año',
        value_vars=['2021','2022','2023'],
        value_name='Ventas')

a aggfunc también le podemos pasar una lista de funciones.

table = df.pivot_table(index='Genre', columns='Year', values='User Rating',aggfunc= [min, max, np.mean])
table

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

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

cuando usamos “pivot” para crear una tabla de las calificaciones de los géneros a través de los años:

df_books.pivot_table(index='Genre',columns='Year', values='User Rating',aggfunc='mean')

creo que es mas pertinente usar “mean” como función de entrada en vez de sum, así vemos el promedio de calificaciones del genero y no solo una sumatoria que poca relevancia puede llegar a tener.

Para agregar una lambda function sería de la siguiente manera.

df_books.pivot_table(index='Author',columns='Genre',values='Price',aggfunc=lambda x : sum(i * 1000 for i in x))

La funcion melt es un poco parecida ha aplicar unstack() pueden revisarla aqui:
https://www.w3resource.com/pandas/dataframe/dataframe-unstack.php

Sum is not an interesting attribute in comparison among ‘Genre’ and ‘Year’ because sum of rating just not shows up how successful was Fiction or Non Fiction in each year. A more ccurate metric could be .mean()

df_books.pivot_table(index='Genre', columns='Year', values='User Rating', aggfunc='mean').round(2)

con mi data:

Personalmente no me gusta que la clase sea escrita , me gusta que sea en video como las anteriores que son exageradmente buenas , muy pero muy buenas

This function is useful to massage a DataFrame into a format where one or more columns are identifier variables (id_vars), while all other columns, considered measured variables (value_vars), are “unpivoted” to the row axis, leaving just two non-identifier columns, ‘variable’ and ‘value’.

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.

```python df_book.pivot_table(index="Genre", columns="Year", values="Price", aggfunc="sum") ```df\_book.pivot\_table(index="Genre", columns="Year", values="Price", aggfunc="sum") A partir de aqui, se pueden ver el genero más vendido a travez de los años y realizar una distribución.
Por favor, alguien sabe como totalizar?. Por ejemplo cuando se coloca la función count
¡Muy bueno que haya una clase solo de lectura! Son métodos de aprendizaje, ergo, considero que no es mala idea. Hay gente que aprende más leyendo que escuchando un profe, otros viendo videos y gráficas, y hay otros que lo hacen en el salón de clases. ¡Busquemos nuestra manera óptima de aprender!

En este ejercicio se puede visualizar el uso de nuestro proyecto y como este se puede implementar en el desarrollo del sistema. Mas si podemos cambiar la forma de los dataframe con pivot.

Que malo que no haya video para entender esto. Tendre que buscarlo en youtube.

Con mis datos:

### **Función** `pivot` La función `pivot` se utiliza para reestructurar o dar forma a los datos en un DataFrame. Es especialmente útil cuando necesitas reorganizar datos que están en formato largo (donde las variables se encuentran en una sola columna) a un formato ancho (donde cada variable se extiende a través de múltiples columnas). **Sintaxis Básica:** pythonCopy code DataFrame.pivot(index=None, columns=None, values=None) * `index`: Columna(s) para usar como índice del nuevo DataFrame. * `columns`: Columna(s) para usar como columnas del nuevo DataFrame. * `values`: Columna(s) cuyos valores quieres distribuir a través del nuevo DataFrame. **Ejemplo:** Imagina un DataFrame que contiene datos de ventas, donde tienes columnas para `fecha`, `producto` y `ventas`. Si quieres ver las ventas de cada producto en cada fecha en un formato más legible, puedes usar `pivot` para reorganizar estos datos. ![](https://static.platzi.com/media/user_upload/image-c98ad2c3-41f9-4c17-ab99-a8f1323909b2.jpg) ### **Función** `melt` La función `melt` se utiliza para transformar o "desapilar" un DataFrame desde un formato ancho a un formato largo. Es útil cuando tienes datos en un formato donde varias columnas representan la misma variable y quieres consolidarlas en una sola columna. **Sintaxis Básica:** pythonCopy code DataFrame.melt(id\_vars=None, value\_vars=None, var\_name=None, value\_name='value', col\_level=None) * `id_vars`: Columna(s) que se mantendrán fijas. * `value_vars`: Columna(s) que se desapilarán. * `var_name`: Nombre de la nueva columna que se creará para representar las columnas desapiladas. * `value_name`: Nombre de la nueva columna que se creará para representar los valores de las columnas desapiladas. **Ejemplo:** Si tienes un DataFrame con una columna para `año`, y luego columnas separadas para diferentes productos y sus ventas (por ejemplo, `producto1`, `producto2`, etc.), puedes usar `melt` para transformar estas columnas de productos en una sola columna `producto` y otra columna `ventas`. Estas transformaciones son cruciales en ciencia de datos para la preparación y limpieza de datos, y comprender cómo usarlas puede facilitar mucho el manejo de tus conjuntos de datos. ![](https://static.platzi.com/media/user_upload/image-37073d34-b522-46d9-977b-397d967a7a4c.jpg)
Puedes usar una variedad de funciones de agregación según tus necesidades. Algunas de las funciones de agregación comunes incluyen: 1\. `np.median`: Calcula la mediana de los valores. `aggfunc=np.median` 2\. `np.std`: Calcula la desviación estándar de los valores. `aggfunc=np.std` 3\. `np.var`: Calcula la varianza de los valores. `aggfunc=np.var` 4\. `len` (para contar elementos): Cuenta la cantidad de elementos en un grupo. `aggfunc=len` 5\. `np.sum`: Calcula la suma de los valores (similar a `sum`). `aggfunc=np.sum` 6\. `np.prod`: Calcula el producto de los valores en un grupo. `aggfunc=np.prod` 7\. `np.percentile`: Calcula percentiles específicos, como el percentil 25 (primer cuartil) o el percentil 75 (tercer cuartil). `aggfunc=lambda x: np.percentile(x, 25) # Percentil 25` 8\. `np.quantile`: Calcula cuantiles específicos. `aggfunc=lambda x: np.quantile(x, 0.75) # Cuantil 75 (equivalente al tercer cuartil)` 9\. Funciones personalizadas: Puedes definir tus propias funciones de agregación personalizadas y usarlas en `aggfunc`. `def custom_aggregation(x):` ` # Tu lógica de agregación personalizada` ` return ...` `aggfunc=custom_aggregation` Estas son solo algunas de las opciones disponibles. Puedes utilizar cualquier función de agregación que acepte un arreglo de valores y devuelva un resultado agregado.
NO pude encontrar el data frame en ningun lado, alguien puede ayudarme (ESTO DESDE LAS CLASES ANTERIORES QUE SE USO, LES AGRADECERIA SI ALGUIEN ME LO MANDA PORFA)

Excelente varias herramientas más para darle un formato diferente a tu dataframe según tus necesidads. **pivot\_table**: para cambiar los valores de tus columnas y usarlas como indexes, columnas de los valores de n columnas para tu nuevo dataframe. El hecho de poder usar funciones de agrupamiento hace muy útil a esta función. **Melt:** basicamente es una transformación vertical. Tus columnas n pasan a ser filas de tus valores n.

Power Pivot es muy usado en Power BI. Te sirve para identificar la relacion entre tablas.

El metodo melt, tiene algo de similar a una matriz transpuesta pues hace el cambio de columnas por filas.
Mientras que pivot_table se parece mucho a como se grafican los valores a mano de una función de dos variables independientes f(x,y)

Pivot/Melt

  • pivot: es un método que transforma los valores de determinados columnas o filas en un nuevo dataframe y la intersección de estos dan el valor resultante:
df.pivot_table(index = 'col1', columns = 'col2', values = 'col3', aggfuntion = 'func')
  • met: Toma las columnas del DataFrame y las pasa a filas con dos columnas que especifican ;a antigua fila y el calor que tenia:
df.melt(id_vars = 'col1',values_vars = 'col2')

Creo que pivot_table es muy útil, deja manipular y transformar los DataFrames de manera muy versátil.

Mi problema con las clases, pero particularmente con esta, es que si aprendo algo fuera de contexto es como si no aprendiera nada, me pasa con melt, ¿Cuáles podrían ser sus casos de uso?, el texto no lo dice y no puedo pensar en algo con la poca experiencia que tengo

df_books.melt(id_vars='Year',value_vars='Genre')

Year variable value
0 2016 Genre Non Fiction
1 2011 Genre Fiction
2 2018 Genre Non Fiction
3 2017 Genre Fiction
4 2019 Genre Non Fiction
… … … …
545 2019 Genre Fiction
546 2016 Genre Non Fiction
547 2017 Genre Non Fiction
548 2018 Genre Non Fiction
549 2019 Genre Non Fiction
550 rows × 3 columns

Ya que en esta sección no hay video, aquí hay un ejemplo de implementación de Melt que puede decirse que es como “despivotar” una tabla dinámica. https://www.youtube.com/watch?v=-7QDKz6hWmc

Información resumida de esta clase
#EstudiantesDePlatzi

  • Las funciones que nos ayudan para cambiar la estructura de nuestros DataFrames son melt y pivot_table

  • Con pivot_table puedo transformar los valores de columnas o filas en los índices de un nuevo DataFrame

  • Si utilizamos melt pasaremos los datos de una columna a ser filas y se crearán dos nuevas columnas para especificar la antigua columna y el valor que traía

si no te suma es porque:

df_books = df_books.astype({'Name: ‘string’, 
														‘Author’: ‘float64’,
														'User Rating: ‘float32’,
														‘Reviews’: ‘int32’,
														‘Price’: ‘float32’,
														‘Year’: ‘int32’,
														‘Genre’: ‘string’})

ese código funciona si al sumar en lugar de suma te repite el texto esto porque el csv no carga los valores correctos lo hemos ajustado usando astype :
nombre_de_tu_data_frame = nombre_de_tu_data_frame.astype({'Primera Columna: ‘tipo_de_dato_de_tu_primera_columna’,
‘2da columna’: ‘tipodato’})

los tipos de datos soportados son los float (un numero con decimales), int (el entero sea 32 o 64)y string (cadenas de texto), entre otros… creo que booleano es bool, aquíite dejo el ejemplo para este código

si tienes columnas basura también las puedes borrar como dice la clase anterior sobre borrar:

#por ejemplo tenemos el tipo de dato enla columna1 y los queremos eliminar para queno nos dañe el formato  

nombre_de_tu_dframe = nombre_de_tu_dframe.drop(0, axis=0)

en este ejemplo eliminamos la primera columna que contenía los tipos de dato en una string


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:

[1]
0 s
import pandas as pd
import numpy as np

[4]
0 s
df_books = pd.read_csv("/content/bestsellers-with-categories_.csv",sep=',',header=0)
df_books.head(10)

[6]
df_books.pivot_table(index='Author',columns='Genre',values='User Rating')
# aplicando pivot table
#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.

[7]
df_books.pivot_table(index='Genre',columns='Year', values='User Rating',aggfunc='sum')
#Ejecuta la siguiente variación:
#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.

[9]
0 s
df_books[['Name','Genre']].head(5)
#Para ello ejecuta la siguiente línea en tu Jupyter Notebook:


[10]
df_books[['Name','Genre']].head(5).melt()
#Aplica melt de la siguiente manera:
#Ahora cada resultado de las dos columnas pasa a una fila de este modo a tipo 
#llave:valor.

[11]
0 s
df_books.melt(id_vars='Year',value_vars='Genre')
#En el siguiente ejemplo ejecutemos melt de esta manera:

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.