Агрегация

Последнее обновление: 19.01.2026

Агрегация представляет процесс применения функции к каждой группе и объединения результатов в компактную форму для анализа. Функции агрегации могут включать сумму, среднее значение, количество, максимум, минимум и другие. Эти функции помогают получать значимые статистические данные и сводки из сгруппированных данных, выявляя тенденции, закономерности и взаимосвязи.

Pandas предоставляет ряд встроенных методов для агрегирования данных. Некоторые распространенные методы:

  • mean(): вычисляет среднее значение столбца.

  • sum(): cуммирует значения столбца, показывая общую сумму.

  • min(): определяет наименьшее значение в столбце.

  • max(): находит наибольшее значение в столбце.

  • count(): вычисляет количество ненулевых значений в столбце.

  • median(): вычисляет среднее значение в столбце.

  • std(): измеряет разброс значений в столбце.

  • var(): вычисляет изменчивость значений в столбце.

Все эти методы имеют одинаковый синтаксис:

result = data["столбец"].метод()

Посмотрим на применение методов:

import pandas as pd

data = {
    "City": ["Москва", "Санкт-Петербург", "Новосибирск", "Екатеринбург", "Казань", "Красноярск", "Нижний Новгород", "Челябинск", "Уфа", "Краснодар", "Самара", "Ростов-на-Дону", "Омск", "Воронеж", "Пермь", "Волгоград"], 
    "Population": [13274, 5653, 1637, 1548, 1330, 1212, 1198, 1177, 1166, 1155, 1154, 1143, 1101, 1042, 1028, 1012],
    "Time zone": ["GMT+3", "GMT+3","GMT+7","GMT+5","GMT+3","GMT+7","GMT+3","GMT+5","GMT+5","GMT+3","GMT+4","GMT+3","GMT+6","GMT+3","GMT+5","GMT+3"]
}

df = pd.DataFrame(data)

print("Минимальное население:", df["Population"].min())
print("Максимальное население:", df["Population"].max())
print("Среднее население:", df["Population"].mean())
print("Медиана по населению:", df["Population"].median())
print("Совокупное население:", df["Population"].sum())
print("Количество городов:", df["Population"].count())
print("Стандартное отклонение:", df["Population"].std())
print("Вариативность:", df["Population"].var())

В данном случае применяем каждый из методов к данным городов-миллионеров. В итоге мы получим следующий результат:

Минимальное население: 1012
Максимальное население: 13274
Среднее население: 2239.375
Медиана по населению: 1171.5
Совокупное население: 35830
Количество городов: 16
Стандартное отклонение: 3149.2196678965834
Вариативность: 9917584.516666668

И поскольку группы представляют наборы данных DataFrame, мы можем применить группировку и затем применить методы агрегации в рамках каждой отдельной группы. Например, найдем города с максимальным населением в каждом часовом поясе:

import pandas as pd

data = {
    "City": ["Москва", "Санкт-Петербург", "Новосибирск", "Екатеринбург", "Казань", "Красноярск", "Нижний Новгород", "Челябинск", "Уфа", "Краснодар", "Самара", "Ростов-на-Дону", "Омск", "Воронеж", "Пермь", "Волгоград"], 
    "Population": [13274, 5653, 1637, 1548, 1330, 1212, 1198, 1177, 1166, 1155, 1154, 1143, 1101, 1042, 1028, 1012],
    "Time zone": ["GMT+3", "GMT+3","GMT+7","GMT+5","GMT+3","GMT+7","GMT+3","GMT+5","GMT+5","GMT+3","GMT+4","GMT+3","GMT+6","GMT+3","GMT+5","GMT+3"]
}

df = pd.DataFrame(data)

# группировка по столбцу "Time zone"
grouped_by_timezone = df.groupby("Time zone")
# получаем города с максимальным населением в каждом часовом поясе
max_population = grouped_by_timezone["Population"].max()

print(max_population)

Результат программы:

Time zone
GMT+3    13274
GMT+4     1154
GMT+5     1548
GMT+6     1101
GMT+7     1637
Name: Population, dtype: int64

ПРи применении агрегатной функции к каждой группе фактически мы получаем объект Series, который называется по имени столбца (в данном случае "Population") и в котором в качестве инлексов выступают значения из столбца, по которому шла группировка (в данном случае "Time zone", то есть часовой пояс).

Либо при переьоре можно применить сразу ряд функций к группе:

import pandas as pd

data = {
    "City": ["Москва", "Санкт-Петербург", "Новосибирск", "Екатеринбург", "Казань", "Красноярск", "Нижний Новгород", "Челябинск", "Уфа", "Краснодар", "Самара", "Ростов-на-Дону", "Омск", "Воронеж", "Пермь", "Волгоград"], 
    "Population": [13274, 5653, 1637, 1548, 1330, 1212, 1198, 1177, 1166, 1155, 1154, 1143, 1101, 1042, 1028, 1012],
    "Time zone": ["GMT+3", "GMT+3","GMT+7","GMT+5","GMT+3","GMT+7","GMT+3","GMT+5","GMT+5","GMT+3","GMT+4","GMT+3","GMT+6","GMT+3","GMT+5","GMT+3"]
}

df = pd.DataFrame(data)

# группировка по столбцу "Time zone"
grouped_by_timezone = df.groupby("Time zone")

for time_zone, group in grouped_by_timezone:
    print(f"Time zone: {time_zone}")
    # получаем город с максимальным населением в текущей группе
    max_val = group["Population"].max()
    # получаем город с минимальным населением в текущей группе
    min_val = group["Population"].min()
    # получаем количество городов в текущей группе
    count = group["Population"].count()
    print("Мин: ", min_val)
    print("Макс: ", max_val)
    print("Количество городов: ", count)
    print()

Результат работы программы:

Time zone: GMT+3
Мин:  1012
Макс:  13274
Количество городов:  8

Time zone: GMT+4
Мин:  1154
Макс:  1154
Количество городов:  1

Time zone: GMT+5
Мин:  1028
Макс:  1548
Количество городов:  4

Time zone: GMT+6
Мин:  1101
Макс:  1101
Количество городов:  1

Time zone: GMT+7
Мин:  1212
Макс:  1637
Количество городов:  2
Помощь сайту
Юмани:
410011174743222
Номер карты:
4048415020898850