Агрегатные функции в Pandas

Агрегатные функции «сворачивают» массив значений в одно число: сумма, среднее, максимум, медиана и т.д. В Pandas их можно вызывать как методы (df.sum()) или передавать в agg — последний удобен, когда нужно несколько разных агрегаций сразу.

Когда использовать

  • Метрики качества данных (средняя температура, разброс, минимумы).

  • Итоговые строки в отчётах.

  • Сравнение групп через GroupBy в Pandas.

Пример 1. Сумма и среднее по столбцу

import pandas as pd

df = pd.DataFrame({"v": [10, 20, 30, 40]})
print("sum:", df["v"].sum())
print("mean:", df["v"].mean())

Output:

sum: 100
mean: 25.0

Пример 2. Все агрегации сразу

import pandas as pd

df = pd.DataFrame({"v": [10, 20, 30]})
print(df["v"].describe())

Output:

count     3.0
mean     20.0
std      10.0
min      10.0
25%      15.0
50%      20.0
75%      25.0
max      30.0
Name: v, dtype: float64

Пример 3. agg со списком

import pandas as pd

df = pd.DataFrame({"temp": [22, 35, 41]})
print(df["temp"].agg(["min", "max", "mean"]))

Output:

min     22.000000
max     41.000000
mean    32.666667
Name: temp, dtype: float64

Пример 4. Разные функции для разных столбцов

import pandas as pd

df = pd.DataFrame({"temp": [22, 35, 41], "hum": [55, 60, 30]})
print(df.agg({"temp": "max", "hum": "min"}))

Output:

temp    41
hum     30
dtype: int64

Пример 5. Своя функция

import pandas as pd

df = pd.DataFrame({"v": [10, 20, 30]})
print(df["v"].agg(lambda x: x.max() - x.min()))

Output:

20

Пример 6. Подсчёт уникальных

import pandas as pd

df = pd.DataFrame({"device": ["bot1", "bot2", "bot1", "bot3"]})
print("уникальных:", df["device"].nunique())
print(df["device"].value_counts())

Output:

уникальных: 3
device
bot1    2
bot2    1
bot3    1
Name: count, dtype: int64

Пример 7. С группировкой

import pandas as pd

df = pd.DataFrame({
    "device": ["bot1", "bot1", "bot2"],
    "temp": [22, 26, 30],
})
print(df.groupby("device").agg({"temp": ["mean", "max"]}))

Output:

        temp
        mean max
device
bot1    24.0  26
bot2    30.0  30

Подводные камни

  • По умолчанию агрегатные функции игнорируют NaN — но count тоже не считает их, а size — считает все строки.

  • sum() для пустого Series возвращает 0, а mean() — NaN.

  • Для нечисловых столбцов имеет смысл только count, min, max, mode.

См. также

Примечание

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

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