Функция melt
Функция melt применяется к DataFrame
и преобразует его из широкого формата в длинный.
Она "расплавляет" таблицу, превращая указанные столбцы
в две новые колонки: одна содержит имена переменных,
другая - их значения. Это полезно для подготовки данных
к анализу или визуализации.
Основные параметры функции:
id_vars - столбцы, которые останутся идентификаторами
(не будут "расплавлены"), value_vars - столбцы,
которые нужно преобразовать (если не указаны,
преобразуются все, кроме id_vars), var_name - имя
для столбца с именами переменных (по умолчанию 'variable'),
value_name - имя для столбца со значениями
(по умолчанию 'value').
Синтаксис
pd.melt(df, id_vars=None, value_vars=None,
var_name='variable', value_name='value')
Пример
Преобразуем таблицу, оставив столбец 'a' как идентификатор, а столбцы 'b' и 'c' расплавим:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3],
'b': [10, 20, 30],
'c': [100, 200, 300]
})
res = pd.melt(df, id_vars=['a'],
value_vars=['b', 'c'])
print(res)
Результат выполнения кода:
a variable value
0 1 b 10
1 2 b 20
2 3 b 30
3 1 c 100
4 2 c 200
5 3 c 300
Пример
Изменим имена столбцов для переменной и значения
с помощью параметров var_name и value_name:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3],
'b': [10, 20, 30],
'c': [100, 200, 300]
})
res = pd.melt(df, id_vars=['a'],
value_vars=['b', 'c'],
var_name='param',
value_name='val')
print(res)
Результат выполнения кода:
a param val
0 1 b 10
1 2 b 20
2 3 b 30
3 1 c 100
4 2 c 200
5 3 c 300
Пример
Если не указать value_vars, то "расплавятся"
все столбцы, кроме указанных в id_vars:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2],
'b': [10, 20],
'c': [100, 200],
'd': [1000, 2000]
})
res = pd.melt(df, id_vars=['a'])
print(res)
Результат выполнения кода:
a variable value
0 1 b 10
1 2 b 20
2 1 c 100
3 2 c 200
4 1 d 1000
5 2 d 2000
Пример
Преобразуем таблицу, где несколько столбцов-идентификаторов:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2],
'b': ['x', 'y'],
'c': [10, 20],
'd': [100, 200]
})
res = pd.melt(df, id_vars=['a', 'b'],
value_vars=['c', 'd'])
print(res)
Результат выполнения кода:
a b variable value
0 1 x c 10
1 2 y c 20
2 1 x d 100
3 2 y d 200
Смотрите также
-
функция
pivot,
которая выполняет обратное преобразование - из длинного формата в широкий -
функция
pivot_table,
которая создаёт сводную таблицу с агрегацией данных -
функция
wide_to_long,
которая преобразует широкий формат в длинный с более сложной логикой -
функция
crosstab,
которая строит таблицу частот для двух и более факторов