Поиск по сайту:

Pandas Melt() и Unmelt с помощью функции pivot()


Функция Pandasmelt() используется для изменения формата DataFrame с широкого на длинный. Он используется для создания определенного формата объекта DataFrame, в котором один или несколько столбцов работают как идентификаторы. Все остальные столбцы рассматриваются как значения и не сводятся к оси строк, и только два столбца — переменная и значение.

1. Пример плавления панд()

Использование функцииmelt() становится более понятным при рассмотрении примера.

import pandas as pd

d1 = {"Name": ["Pankaj", "Lisa", "David"], "ID": [1, 2, 3], "Role": ["CEO", "Editor", "Author"]}

df = pd.DataFrame(d1)

print(df)

df_melted = pd.melt(df, id_vars=["ID"], value_vars=["Name", "Role"])

print(df_melted)

Выход:

     Name  ID    Role
0  Pankaj   1     CEO
1    Lisa   2  Editor
2   David   3  Author

   ID variable   value
0   1      Name  Pankaj
1   2      Name    Lisa
2   3      Name   David
3   1      Role     CEO
4   2      Role  Editor
5   3      Role  Author

Мы можем передать параметры «var_name» и «value_name», чтобы изменить имена столбцов «variable» и «value».

df_melted = pd.melt(df, id_vars=["ID"], value_vars=["Name", "Role"], var_name="Attribute", value_name="Value")

Рекомендуем прочитать: Учебное пособие по Python Pandas

2. Несколько столбцов как id_vars

Давайте посмотрим, что происходит, когда мы передаем несколько столбцов в качестве параметра id_vars.

df_melted = pd.melt(df, id_vars=["ID", "Name"], value_vars=["Role"])
print(df_melted)

Выход:

   ID    Name variable   value
0   1  Pankaj     Role     CEO
1   2    Lisa     Role  Editor
2   3   David     Role  Author

3. Пропуск столбцов в функции Melt()

Не обязательно использовать все строки из исходного DataFrame. Давайте пропустим столбец \ID в следующем примере.

df_melted = pd.melt(df, id_vars=["Name"], value_vars=["Role"])
print(df_melted)

Выход:

     Name variable   value
0  Pankaj     Role     CEO
1    Lisa     Role  Editor
2   David     Role  Author

4. Расплавление DataFrame с помощью функции pivot()

Мы можем использовать функцию pivot(), чтобы разбить объект DataFrame и получить исходный фрейм данных. Значение параметра index функции pivot() должно совпадать со значением id_vars. Значение «columns» должно быть передано как имя столбца «variable».

import pandas as pd

d1 = {"Name": ["Pankaj", "Lisa", "David"], "ID": [1, 2, 3], "Role": ["CEO", "Editor", "Author"]}

df = pd.DataFrame(d1)

# print(df)

df_melted = pd.melt(df, id_vars=["ID"], value_vars=["Name", "Role"], var_name="Attribute", value_name="Value")

print(df_melted)

# unmelting using pivot()

df_unmelted = df_melted.pivot(index='ID', columns='Attribute')

print(df_unmelted)

Выход:

   ID Attribute   Value
0   1      Name  Pankaj
1   2      Name    Lisa
2   3      Name   David
3   1      Role     CEO
4   2      Role  Editor
5   3      Role  Author

            Value        
Attribute    Name    Role
ID                       
1          Pankaj     CEO
2            Lisa  Editor
3           David  Author

Нерасплавленные значения DataFrame такие же, как исходный DataFrame. Но столбцы и индекс нуждаются в незначительных изменениях, чтобы они были точно такими же, как исходный фрейм данных.

df_unmelted = df_unmelted['Value'].reset_index()
df_unmelted.columns.name = None
print(df_unmelted)

Выход:

   ID    Name    Role
0   1  Pankaj     CEO
1   2    Lisa  Editor
2   3   David  Author

Ссылка: Pandas Melt() API Doc