Función `melt()` de Pandas
Índice de contenido
Introducción
La función melt() en Pandas se utiliza para transformar un DataFrame de formato ancho (wide format) en un formato largo (long format).
La sintaxis básica de la función melt() es la siguiente:
En cuyo caso:
df: es el DataFrame que se desea transformar.id_vars: son las columnas que se deben mantener fijas y no se transformarán. Se puede pasar una cadena o una lista de cadenas para especificar las columnas.value_vars: son las columnas que se deben transformar. Se puede pasar una cadena o una lista de cadenas para especificar las columnas.var_name: es el nombre que se asignará a la nueva columna que contendrá los nombres de las columnas transformadas.value_name: es el nombre que se asignará a la nueva columna que contendrá los valores de las columnas transformadas.
Aquí hay un ejemplo para ilustrar cómo usar la función melt():
import pandas as pd
Primer ejemplo
# Creamos un DataFrame de ejemplo:
df = pd.DataFrame({'ID': [1, 2, 3],
'Nombre': ['Juan', 'Maria', 'Pedro'],
'Edad': [25, 30, 35],
'Ciudad1': ['Madrid', 'Barcelona', 'Valencia'],
'Ciudad2': ['Sevilla', 'Malaga', 'Bilbao']})
df.head(4)
| ID | Nombre | Edad | Ciudad1 | Ciudad2 | |
|---|---|---|---|---|---|
| 0 | 1 | Juan | 25 | Madrid | Sevilla |
| 1 | 2 | Maria | 30 | Barcelona | Malaga |
| 2 | 3 | Pedro | 35 | Valencia | Bilbao |
# Transformamos el DataFrame de formato ancho a formato largo:
df_melted = pd.melt(df,
id_vars = ['ID', 'Nombre', 'Edad'],
value_vars = ['Ciudad1', 'Ciudad2'],
var_name = 'Ciudad',
value_name = 'Valor')
df_melted.head(12)
| ID | Nombre | Edad | Ciudad | Valor | |
|---|---|---|---|---|---|
| 0 | 1 | Juan | 25 | Ciudad1 | Madrid |
| 1 | 2 | Maria | 30 | Ciudad1 | Barcelona |
| 2 | 3 | Pedro | 35 | Ciudad1 | Valencia |
| 3 | 1 | Juan | 25 | Ciudad2 | Sevilla |
| 4 | 2 | Maria | 30 | Ciudad2 | Malaga |
| 5 | 3 | Pedro | 35 | Ciudad2 | Bilbao |
En este ejemplo, el DataFrame df tiene dos columnas de ciudades, Ciudad1 y Ciudad2, que se deben transformar en una única columna de ciudades en el DataFrame transformado. La función melt() se utiliza para hacer esto, y los resultados se almacenan en el DataFrame df_melted.
Segundo ejemplo
# Creamos un DataFrame de ejemplo:
df = pd.DataFrame({'Estudiante': ['Juan', 'Maria', 'Pedro', 'Ana'],
'Matematicas': [90, 85, 75, 95],
'Ciencias': [80, 92, 70, 87],
'Historia': [95, 88, 78, 82]})
df.head(4)
| Estudiante | Matematicas | Ciencias | Historia | |
|---|---|---|---|---|
| 0 | Juan | 90 | 80 | 95 |
| 1 | Maria | 85 | 92 | 88 |
| 2 | Pedro | 75 | 70 | 78 |
| 3 | Ana | 95 | 87 | 82 |
# Transformamos el DataFrame de formato ancho a formato largo:
df_melted = pd.melt(df,
id_vars = ['Estudiante'],
value_vars = ['Matematicas', 'Ciencias', 'Historia'],
var_name = 'Asignatura',
value_name = 'Calificacion')
df_melted.head(12)
| Estudiante | Asignatura | Calificacion | |
|---|---|---|---|
| 0 | Juan | Matematicas | 90 |
| 1 | Maria | Matematicas | 85 |
| 2 | Pedro | Matematicas | 75 |
| 3 | Ana | Matematicas | 95 |
| 4 | Juan | Ciencias | 80 |
| 5 | Maria | Ciencias | 92 |
| 6 | Pedro | Ciencias | 70 |
| 7 | Ana | Ciencias | 87 |
| 8 | Juan | Historia | 95 |
| 9 | Maria | Historia | 88 |
| 10 | Pedro | Historia | 78 |
| 11 | Ana | Historia | 82 |
En este ejemplo, hemos especificado id_vars = ['Estudiante'] para que la columna de los nombres de los estudiantes no se transforme. Luego, hemos especificado var_name = 'Asignatura' y value_name = 'Calificacion' para que las columnas de las asignaturas y las calificaciones se renombren adecuadamente.
