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.