Solución - Remodelar Datos: Melt
Pandas
Vista general
El problema requiere remodelar un DataFrame dado que captura la información de ventas de los productos en diferentes trimestres. Inicialmente, la información está estructurada en un formato ancho, donde cada producto tiene columnas separadas para las ventas de cada trimestre. El objetivo es transformar esta información en un formato largo, donde cada fila representa la información de ventas para un producto específico en un trimestre particular, efectivamente consolidando las columnas multiples de los trimestres en dos columnas: una indicando el trimestre y la otra detallando las ventas para ese trimestre.
Conceptos clave
Función
melt
: La funciónmelt
de pandas se utiliza para transformar o remodelar información. Esta cambia el DataFrame de un formato ancho, donde las columnas representan multiples variables, a un formato largo, donde cada fila representa una variable única. EN nuestro caso, queremos transformar la información de ventas de tener columnas separadas para cada trimestre a un formato donde hay una única columna para cada trimestre y una única columna para cada venta.Argumentos de la función
melt
:id_vars
: Este argumento especifica las columnas que deben permanecer sin cambios. Para este problema, solo la columnaproduct
permanece sin cambios porque queremos que cada fila del resultado se asocie a cada producto.value_vars
: Este argumento especifica las columnas que queremos “fusionar” o remodelar en filas. En nuestro caso, son las columnas de las ventas para cada trimestre:quarter_1
,quarter_2
,quarter_3
, yquarter_4
.var_name
: Este argumento es el nombre de la nueva columna que almacenará los encabezados de losvalue_vars
. En nuestro problema, esos son los nombres de los trimestres.value_name
: Este es el nombre de la nueva columna que almacenará los valores de losvalue_vars
. En nuestro problema, serán los totales de ventas de cada producto en cada trimestre.
Intuición
Utilizando el ejemplo dado:
product | quarter_1 | quarter_2 | quarter_3 | quarter_4 |
---|---|---|---|---|
Umbrella | 417 | 224 | 379 | 611 |
SleepingBag | 800 | 936 | 93 | 875 |
id_vars=['product']
contiene la columnaproduct
sin cambios.value_vars=['quarter_1', ..., 'quarter_4'
significa que estamos tomando la información de esas columnas y remodelandola en dos nuevas columnas.var_name='quarter'
creará una nueva columnas llamadaquarter
, y cada entrada será nombre de la columna de deonde la información de ventas fue tomada (por ejemplo,quarter_1
,quarter_2
, etc.).value_name='sales'
creará una nueva columna llamadasales
, la cual almacenará los valores de las ventas.
Al aplicar la función melt
, el DataFrame se remodela al formato largo deseado.
Utilizando la Solución
Visualizando la función melt
Cuando pasamos el siguiente DataFrame a la función:
product | quarter_1 | quarter_2 | quarter_3 | quarter_4 |
---|---|---|---|---|
Umbrella | 417 | 224 | 379 | 611 |
SleepingBag | 800 | 936 | 93 | 875 |
Nos retornará:
product | quarter | sales |
---|---|---|
Umbrella | quarter_1 | 417 |
SleepingBag | quarter_1 | 800 |
Umbrella | quarter_2 | 224 |
SleepingBag | quarter_2 | 936 |
Umbrella | quarter_3 | 379 |
SleepingBag | quarter_3 | 93 |
Umbrella | quarter_4 | 611 |
SleepingBag | quarter_4 | 875 |
Implementación
import pandas as pd
def meltTable(report: pd.DataFrame) -> pd.DataFrame:
value_vars = [
"quarter_1",
"quarter_2",
"quarter_3",
"quarter_4"
]
report = report.melt(
id_vars=["product"],
value_vars=value_vars,
var_name="quarter",
value_name="sales",
)
return report