DataFrame.groupby() / Series.groupby()
Метод groupby() реализует шаблон split-apply-combine: разбивает данные по значениям одного или нескольких ключей, применяет функцию к каждой группе и объединяет результат. Базовый инструмент анализа табличных данных.
Сигнатура
DataFrame.groupby(by=None, axis=0, level=None, as_index=True,
sort=True, group_keys=True, observed=False,
dropna=True)
Параметры
by— имя столбца, список столбцов, функция или массив, по которым группировать.axis—0(строки) или1(столбцы).level— уровеньMultiIndexдля группировки.as_index— использовать ключи как индекс результата (по умолчаниюTrue).sort— сортировать ключи групп.dropna— исключать группы сNaNв ключе.
Возвращаемое значение
Объект DataFrameGroupBy или SeriesGroupBy, к которому применяются методы агрегации (mean(), sum(), count(), agg() и др.).
Примеры
Пример 1. Среднее по группам
import pandas as pd
df = pd.DataFrame({
"sensor": ["A", "B", "A", "B", "A"],
"temp": [22, 25, 23, 24, 21],
})
print(df.groupby("sensor")["temp"].mean())
sensor
A 22.0
B 24.5
Name: temp, dtype: float64
Пример 2. Несколько агрегаций сразу
import pandas as pd
df = pd.DataFrame({
"cmd": ["FWD", "LEFT", "FWD", "LEFT", "FWD"],
"speed": [150, 120, 160, 110, 140],
})
print(df.groupby("cmd")["speed"].agg(["min", "max", "mean"]))
min max mean
cmd
FWD 140 160 150.0
LEFT 110 120 115.0
Пример 3. Группировка по нескольким столбцам
import pandas as pd
df = pd.DataFrame({
"day": ["Mon", "Mon", "Tue", "Tue"],
"robot": ["P1", "P2", "P1", "P2"],
"runs": [5, 7, 6, 8],
})
print(df.groupby(["day", "robot"])["runs"].sum())
day robot
Mon P1 5
P2 7
Tue P1 6
P2 8
Name: runs, dtype: int64
Пример 4. Подсчёт записей в группе
import pandas as pd
df = pd.DataFrame({"cmd": ["FWD", "FWD", "LEFT", "STOP", "FWD"]})
print(df.groupby("cmd").size())
cmd
FWD 3
LEFT 1
STOP 1
dtype: int64
Пример 5. Итерация по группам
import pandas as pd
df = pd.DataFrame({"g": ["A", "A", "B"], "v": [1, 2, 3]})
for name, group in df.groupby("g"):
print(name, group["v"].tolist())
A [1, 2]
B [3]
См. также
../pivot_table/index
Примечание
Лицензия и источники
Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.