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