preloader

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:

python
pd.melt(df, id_vars, value_vars, var_name, value_name, col_level, ignore_index)

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():

python
import pandas as pd

Primer ejemplo


python
# 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)

IDNombreEdadCiudad1Ciudad2
01Juan25MadridSevilla
12Maria30BarcelonaMalaga
23Pedro35ValenciaBilbao
python
# 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)

IDNombreEdadCiudadValor
01Juan25Ciudad1Madrid
12Maria30Ciudad1Barcelona
23Pedro35Ciudad1Valencia
31Juan25Ciudad2Sevilla
42Maria30Ciudad2Malaga
53Pedro35Ciudad2Bilbao

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


python
# 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)

EstudianteMatematicasCienciasHistoria
0Juan908095
1Maria859288
2Pedro757078
3Ana958782
python
# 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)

EstudianteAsignaturaCalificacion
0JuanMatematicas90
1MariaMatematicas85
2PedroMatematicas75
3AnaMatematicas95
4JuanCiencias80
5MariaCiencias92
6PedroCiencias70
7AnaCiencias87
8JuanHistoria95
9MariaHistoria88
10PedroHistoria78
11AnaHistoria82

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.

comments powered by Disqus