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]

См. также

Примечание

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

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