DataFrame.melt() / pandas.melt()
Метод melt() преобразует DataFrame из «широкого» формата в «длинный»: несколько столбцов-измерений объединяются в два — variable и value. Это операция, обратная pivot().
Сигнатура
DataFrame.melt(id_vars=None, value_vars=None, var_name=None,
value_name='value', col_level=None, ignore_index=True)
Параметры
id_vars— столбцы-«якоря», которые остаются как есть.value_vars— столбцы, которые «расплавляются». По умолчанию — все, кромеid_vars.var_name— имя нового столбца с бывшими именами столбцов.value_name— имя нового столбца со значениями.ignore_index— сбросить индекс в результате.
Возвращаемое значение
Новый DataFrame в длинном формате.
Примеры
Пример 1. Базовое преобразование
import pandas as pd
df = pd.DataFrame({
"id": [1, 2],
"t_a": [22, 23],
"t_b": [21, 24],
})
print(df.melt(id_vars="id"))
id variable value
0 1 t_a 22
1 2 t_a 23
2 1 t_b 21
3 2 t_b 24
Пример 2. Свои имена столбцов
import pandas as pd
df = pd.DataFrame({
"ts": ["t0", "t1"],
"DHT": [22.0, 23.0],
"DS": [22.5, 23.5],
})
print(df.melt(id_vars="ts", var_name="sensor", value_name="temp"))
ts sensor temp
0 t0 DHT 22.0
1 t1 DHT 23.0
2 t0 DS 22.5
3 t1 DS 23.5
Пример 3. Выбор конкретных value_vars
import pandas as pd
df = pd.DataFrame({
"id": [1, 2],
"t": [22, 23],
"h": [55, 60],
"note": ["ok", "ok"],
})
print(df.melt(id_vars="id", value_vars=["t", "h"]))
id variable value
0 1 t 22
1 2 t 23
2 1 h 55
3 2 h 60
Пример 4. Без id_vars — расплавляется всё
import pandas as pd
df = pd.DataFrame({"a": [1, 2], "b": [3, 4]})
print(df.melt())
variable value
0 a 1
1 a 2
2 b 3
3 b 4
Пример 5. Подготовка к plotly/seaborn
Длинный формат удобен для группировки по категории при построении графиков:
import pandas as pd
df = pd.DataFrame({
"day": ["Mon", "Tue", "Wed"],
"p1": [5, 7, 6],
"p2": [8, 6, 9],
})
long = df.melt(id_vars="day", var_name="robot", value_name="runs")
print(long.groupby("robot")["runs"].mean())
robot
p1 6.000000
p2 7.666667
Name: runs, dtype: float64
См. также
Примечание
Лицензия и источники
Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.