DataFrame.pivot()

Метод pivot() преобразует DataFrame из «длинного» формата в «широкий»: уникальные значения одного столбца становятся новыми столбцами, другого — индексом, а третьего — заполняют ячейки. Операция, обратная melt().

Примечание

pivot() требует уникальных комбинаций index + columns. Если дубликаты есть, используйте pivot_table() с агрегацией.

Сигнатура

DataFrame.pivot(*, columns, index=None, values=None)

Параметры

  • columns — столбец, чьи уникальные значения станут именами новых столбцов.

  • index — столбец, чьи значения станут индексом результата. По умолчанию — текущий индекс.

  • values — столбец(ы), значения которого попадут в ячейки. По умолчанию — все остальные.

Возвращаемое значение

Новый DataFrame в широком формате.

Примеры

Пример 1. Базовый pivot

Длинный формат показаний нескольких датчиков → широкий:

import pandas as pd

df = pd.DataFrame({
    "ts":     ["t0", "t0", "t1", "t1"],
    "sensor": ["A",  "B",  "A",  "B"],
    "temp":   [22.1, 23.0, 22.3, 23.2],
})
print(df.pivot(index="ts", columns="sensor", values="temp"))
sensor     A     B
ts
t0      22.1  23.0
t1      22.3  23.2

Пример 2. Без values — все остальные столбцы

import pandas as pd

df = pd.DataFrame({
    "ts":     ["t0", "t1"],
    "sensor": ["A",  "A"],
    "temp":   [22.0, 23.0],
    "hum":    [55,   60],
})
print(df.pivot(index="ts", columns="sensor"))
       temp    hum
sensor    A      A
ts
t0     22.0     55
t1     23.0     60

Пример 3. Список values

import pandas as pd

df = pd.DataFrame({
    "day":    ["Mon", "Mon", "Tue", "Tue"],
    "robot":  ["P1",  "P2",  "P1",  "P2"],
    "runs":   [5, 7, 6, 8],
    "errors": [1, 0, 2, 1],
})
print(df.pivot(index="day", columns="robot",
               values=["runs", "errors"]))
        runs    errors
robot     P1 P2     P1 P2
day
Mon        5  7      1  0
Tue        6  8      2  1

Пример 4. Ошибка при дубликатах

import pandas as pd

df = pd.DataFrame({
    "ts":     ["t0", "t0"],
    "sensor": ["A",  "A"],
    "temp":   [22, 23],
})
try:
    df.pivot(index="ts", columns="sensor", values="temp")
except ValueError as e:
    print("ошибка:", str(e)[:60])
ошибка: Index contains duplicate entries, cannot reshape

Пример 5. Связка melt → pivot (обратное преобразование)

import pandas as pd

wide = pd.DataFrame({"ts": ["t0", "t1"], "A": [22, 23], "B": [21, 24]})
long = wide.melt(id_vars="ts", var_name="sensor", value_name="temp")
restored = long.pivot(index="ts", columns="sensor", values="temp")
print(restored)
sensor   A   B
ts
t0      22  21
t1      23  24

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.