DataFrame.pivot_table()

Метод pivot_table() строит сводную таблицу: группирует данные по строкам и столбцам и применяет агрегирующую функцию к значениям. В отличие от pivot(), допускает дубликаты комбинаций ключей.

Сигнатура

DataFrame.pivot_table(values=None, index=None, columns=None,
                      aggfunc="mean", fill_value=None, margins=False,
                      dropna=True, margins_name="All", observed=True,
                      sort=True)

Параметры

  • values — столбец(ы) со значениями для агрегации.

  • index — столбец(ы) для строк.

  • columns — столбец(ы) для столбцов.

  • aggfunc — функция агрегации: "mean", "sum", "count", список или словарь.

  • fill_value — заполнитель для отсутствующих ячеек.

  • margins — добавить строку/столбец с итогами.

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

DataFrame с агрегированными значениями.

Примеры

Пример 1. Средняя температура по датчику и дню

import pandas as pd

df = pd.DataFrame({
    "day":    ["Mon", "Mon", "Mon", "Tue", "Tue"],
    "sensor": ["A",   "A",   "B",   "A",   "B"],
    "temp":   [22.0, 22.4, 23.0, 22.6, 23.4],
})
print(df.pivot_table(index="day", columns="sensor", values="temp"))
sensor     A     B
day
Mon     22.2  23.0
Tue     22.6  23.4

Пример 2. Сумма с заменой пропусков

import pandas as pd

df = pd.DataFrame({
    "robot": ["P1", "P1", "P2"],
    "task":  ["go", "turn", "go"],
    "runs":  [3, 2, 5],
})
print(df.pivot_table(index="robot", columns="task",
                     values="runs", aggfunc="sum", fill_value=0))
task   go  turn
robot
P1      3     2
P2      5     0

Пример 3. Несколько агрегаций

import pandas as pd

df = pd.DataFrame({
    "sensor": ["A", "A", "B", "B"],
    "temp":   [22, 23, 25, 27],
})
print(df.pivot_table(index="sensor", values="temp",
                     aggfunc=["mean", "max"]))
        mean  max
        temp temp
sensor
A       22.5   23
B       26.0   27

Пример 4. Итоги (margins)

import pandas as pd

df = pd.DataFrame({
    "day":    ["Mon", "Mon", "Tue"],
    "sensor": ["A",   "B",   "A"],
    "temp":   [22,    23,    24],
})
print(df.pivot_table(index="day", columns="sensor",
                     values="temp", aggfunc="sum", margins=True))
sensor     A     B   All
day
Mon     22.0  23.0  45.0
Tue     24.0   NaN  24.0
All     46.0  23.0  69.0

Пример 5. Подсчёт количества записей

import pandas as pd

df = pd.DataFrame({
    "robot": ["P1", "P1", "P2", "P2", "P2"],
    "status":["ok", "err","ok", "ok", "err"],
})
print(df.pivot_table(index="robot", columns="status",
                     values="status", aggfunc="count", fill_value=0))
status  err  ok
robot
P1        1   1
P2        1   2

См. также

Примечание

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

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