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