Función pandas pandas.melt()

Minahil Noor 30 enero 2023
  1. La sintaxis de pandas.melt()
  2. Códigos de ejemplo: pandas.melt()
  3. Códigos de ejemplo: pandas.melt() Con una sola columna como id_vars
  4. Códigos de ejemplo: pandas.melt() Con columnas salteadas
  5. Códigos de ejemplo: pandas.melt() Con múltiples columnas
Función pandas pandas.melt()

La función pandas.melt() remodela o transforma un DataFrame existente. Cambia la orientación del DataFrame de un formato ancho a uno largo.

La sintaxis de pandas.melt()

pandas.melt(dataframe, id_vars, value_vars, var_name, value_name, col_level)

Parámetros

Dataframe obligatorio Es el DataFrame que queremos cambiar al formato largo.
id_vars opcional Puede ser un tuple, list, o una array N-dimensional. Es la columna utilizada para las variables de identificación. Puedes seleccionar más de una columna de identificadores.
value_vars opcional Puede ser un tuple, list, o una array N-dimensional. Por defecto, las columnas no especificadas como variables identificadoras son variables de valor. También puedes seleccionarlas.
var_name opcional Es una variable de tipo scalar. Es el nombre de la columna identificadora. Por defecto, es variable.
value_name opcional Es una variable de tipo scalar. Es el nombre de la columna de no identificadores. Por defecto, es value.
col_level opcional Es un entero o una cadena de caracteres. En el caso de las columnas de múltiples índices, podemos usar este parámetro para transformar nuestro DataFrame.

Retorna

Devuelve un DataFrame transformado que contiene una o más columnas identificadoras y sólo dos columnas no identificadoras llamadas variable y valor.

Códigos de ejemplo: pandas.melt()

Al principio, comprobaremos esta función pasando sólo el parámetro obligatorio DataFrame.

import pandas as pd

dataframe=pd.DataFrame({'Attendance': {0: 60, 1: 100, 2: 80,3: 78,4: 95},
                    'Name': {0: 'Olivia', 1: 'John', 2: 'Laura',3: 'Ben',4: 'Kevin'},
                    'Obtained Marks': {0: '90%', 1: '75%', 2: '82%',3: '64%',4: '45%'}})
dataframe1 = pd.melt(dataframe)

print(dataframe1)

Nuestro DataFrame se ve como

   Attendance    Name Obtained Marks
0          60  Olivia            90%
1         100    John            75%
2          80   Laura            82%
3          78     Ben            64%
4          95   Kevin            45%

Resultado:

          variable   value
0       Attendance      60
1       Attendance     100
2       Attendance      80
3       Attendance      78
4       Attendance      95
5             Name  Olivia
6             Name    John
7             Name   Laura
8             Name     Ben
9             Name   Kevin
10  Obtained Marks     90%
11  Obtained Marks     75%
12  Obtained Marks     82%
13  Obtained Marks     64%
14  Obtained Marks     45%

Aquí se puede ver que en la salida no hay una columna de identificación. Tenemos dos columnas sin identificador. Cada columna del DataFrame original es ahora una fila en la salida DataFrame.

Ahora pasaremos los parámetros opcionales y comprobaremos los resultados.

Códigos de ejemplo: pandas.melt() Con una sola columna como id_vars

import pandas as pd

dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(dataframe, id_vars=["Name"])

print(dataframe1)

Resultado:

     Name        variable value
0  Olivia      Attendance    60
1    John      Attendance   100
2   Laura      Attendance    80
3     Ben      Attendance    78
4   Kevin      Attendance    95
5  Olivia  Obtained Marks   90%
6    John  Obtained Marks   75%
7   Laura  Obtained Marks   82%
8     Ben  Obtained Marks   64%
9   Kevin  Obtained Marks   45%

La columna identificadora se especifica como Name, y las columnas variable y value están junto a ella con los valores extraídos del dataframe original.

También podríamos asignar nombres de var_name y value_name para reemplazar los variable y value predeterminados.

import pandas as pd

dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(
    dataframe, id_vars=["Name"], var_name="Performance", value_name="Success"
)

print(dataframe1)

Resultado:

     Name     Performance Success
0  Olivia      Attendance      60
1    John      Attendance     100
2   Laura      Attendance      80
3     Ben      Attendance      78
4   Kevin      Attendance      95
5  Olivia  Obtained Marks     90%
6    John  Obtained Marks     75%
7   Laura  Obtained Marks     82%
8     Ben  Obtained Marks     64%
9   Kevin  Obtained Marks     45%

Códigos de ejemplo: pandas.melt() Con columnas salteadas

Si queremos comprobar sólo la asistencia, tenemos que especificar el value_vars.

import pandas as pd

dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(
    dataframe,
    id_vars=["Name"],
    value_vars="Attendance",
    var_name="Performance",
    value_name="Success",
)
print(dataframe1)

Resultado:

     Name Performance  Success
0  Olivia  Attendance       60
1    John  Attendance      100
2   Laura  Attendance       80
3     Ben  Attendance       78
4   Kevin  Attendance       95

Sólo muestra la información de la columna Attendance en el DataFrame original.

Códigos de ejemplo: pandas.melt() Con múltiples columnas

Añadimos una columna extra ID al DataFrame de la demostración.

import pandas as pd

dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "ID": {0: 1, 1: 2, 2: 3, 3: 4, 4: 5},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(dataframe, id_vars=["ID", "Name"])

print(dataframe1)

Resultado:

   ID    Name        variable value
0   1  Olivia      Attendance    60
1   2    John      Attendance   100
2   3   Laura      Attendance    80
3   4     Ben      Attendance    78
4   5   Kevin      Attendance    95
5   1  Olivia  Obtained Marks   90%
6   2    John  Obtained Marks   75%
7   3   Laura  Obtained Marks   82%
8   4     Ben  Obtained Marks   64%
9   5   Kevin  Obtained Marks   45%

Ambas columnas ID y Name son asignadas como las columnas de identificación.

Artículo relacionado - Pandas Core