JavaRush /Курсы /Python SELF /Группировка данных и вычисление суммы и среднего значения...

Группировка данных и вычисление суммы и среднего значения

Python SELF
28 уровень , 0 лекция
Открыта

1. Введение в группировку данных

Принцип группировки данных

В реальной жизни мы часто группируем объекты по каким-то признакам: книги с книгами, овощи с овощами, люди с людьми (ну, вы поняли). В программировании это работает аналогично. Группировка данных позволяет нам разбить большой объём данных на меньшие, более управляемые части, чтобы затем проанализировать их.

В pandas для этого используется метод groupby, который позволяет разбить данные на группы и выполнять различные операции на каждой из них. Например, вы можете сгруппировать продажи по отделам магазина и посчитать общую выручку в каждом из них.

Вот пример, как это может выглядеть:

Python

import pandas as pd

# Создаем DataFrame с данными о продажах
data = {'Отдел': ['Продукты', 'Техника', 'Продукты', 'Книги', 'Техника'],
        'Выручка': [100, 200, 150, 50, 300]}

df = pd.DataFrame(data)

# Группируем данные по отделам и считаем суммарную выручку
группа = df.groupby('Отдел')['Выручка'].sum()
print(группа)

Примеры применения группировки

Группировка особенно полезна, когда нужно сравнить данные между разными категориями. Например, если вы работаете в HR и хотите узнать среднюю зарплату в разных отделах компании, или если вы маркетолог и вас интересует, в каком месяце было больше всего продаж для каждого продукта. Эти задачи значительно упрощаются с помощью возможностей группировки в pandas.

2. Вычисление агрегатных функций

Введение в агрегатные функции

Агрегатные функции — это специальные функции, которые применяются к группе данных и возвращают одно значение. Самые распространённые из них — это sum (сумма), mean (среднее значение), и count (количество элементов). Они позволяют свести большое количество информации к более простым и понятным метрикам.

Использование агрегатных функций

Мы уже видели, как считать сумму в предыдущем примере. Теперь давайте посмотрим, как можно вычислить среднее значение и количество продаж в каждом отделе.

Python

# Рассчитываем среднюю выручку по отделам
среднее = df.groupby('Отдел')['Выручка'].mean()
print(среднее)

# Считаем количество продаж по каждому отделу
количество = df.groupby('Отдел')['Выручка'].count()
print(количество)

Примеры вычисления агрегатов

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

Python

data = {'День': ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Ср', 'Вт'],
        'Посещения': [120, 150, 170, 160, 180, 300, 220]}

df = pd.DataFrame(data)

# Считаем среднее количество посещений по дням
средние_посещения = df.groupby('День')['Посещения'].mean()
print(средние_посещения)

3. Практическая работа

Задание по группировке данных и вычислению агрегатов

Представим, что у вас есть массив данных о продажах. Задача: сгруппировать их по категориям и вычислить суммарные продажи, среднюю стоимость заказа и количество заказов в каждой категории. Это поможет вам понять, какие категории товаров приносят наибольшую прибыль и где скрываются потенциальные "золотые жилы".

Python

data = {
    'Категория': ['Электроника', 'Одежда', 'Электроника', 'Книги', 'Книги', 'Одежда'],
    'Сумма_заказа': [250, 100, 150, 200, 500, 300]
}

df = pd.DataFrame(data)

# Считаем суммарные продажи по категориям
сумма = df.groupby('Категория')['Сумма_заказа'].sum()
print(сумма)

# Считаем среднюю стоимость заказа по категориям
средняя_стоимость = df.groupby('Категория')['Сумма_заказа'].mean()
print(средняя_стоимость)

# Считаем количество заказов по категориям
количество_заказов = df.groupby('Категория')['Сумма_заказа'].count()
print(количество_заказов)

Обсуждение результатов группировки и анализ данных

После выполнения задания над группировкой данных и вычислением агрегатов, весьма полезно провести анализ полученных данных. Вы можете заметить, что, например, категория "Книги" имеет наиболее высокую сумму заказов благодаря небольшому, но крупному заказу. Или что "Одежда" имеет больше всего заказов, но средняя стоимость заказа ниже, чем у "Электроники".

Такой анализ может помочь принять обоснованные бизнес-решения, например, сосредоточиться на увеличении среднего размера заказа в категории, которая имеет большее количество заказов, но меньшую среднюю стоимость.

4. Ошибки и особенности

Когда работаешь с группировкой, одна из наиболее частых ошибок — это забыть использовать круглые скобки при применении агрегатных функций. Например, писать df.groupby('Категория').sum() вместо df.groupby('Категория')['Сумма_заказа'].sum(). Также, иногда возникают проблемы с пропусками в данных. Pandas имеет удобные методы для работы с пропусками, такие как fillna(), который позволяет заменить отсутствующие значения на заданные, чтобы избежать искажений в расчётах.

Помимо этого, следите за тем, чтобы типы данных были правильными. Иногда столбцы с числами могут быть прочитаны как строки, и при попытке агрегировать такие данные возникнут ошибки.

Если вам нужно углубиться в работу с pandas и методами группировки, обратитесь к официальной документации pandas для более детального изучения и примеров.

Комментарии (9)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ild Gih Уровень 64
23 июля 2025
благодаря небольшому но крупному заказу
Slevin Уровень 7
18 июля 2025
Программа должна выводить столбчатую диаграмму с суммарными продажами товаров в различных регионах. А нормально давать задания на mathplotlib, лекция по которому будет через 13(ТРИНАДЦАТЬ(!!!)) уровней? Типа - "отложите, вернетесь позже"? Или просто никакой логики в последовательности заданий-лекций не нашлось? Впрочем, у нас тут алгоритмы на 51 уровне... Алгоритмы. В программировании. На 51 занятии... 🤣
Slevin Уровень 7
18 июля 2025
За использование языка отличного от английского в названиях переменных - надо леща давать.
Max Pridan Уровень 30
14 мая 2025
sum, mean,max можно написать сразу в одной строке если использовать на конце вместо .sum - .ass(['sum', 'mean','max'])

data_group = df.groupby('Категория')['Сумма транзакции'].agg(['sum', 'mean','max'])
Sergey O. Уровень 64
25 июня 2025
может agg? 🤣
Slevin Уровень 7
18 июля 2025
Спасибо за метод, реально полезно.
Andrey Kochegarov Уровень 64
1 марта 2025
зачем вообще лекция? просто напишите: "Покурите маны и выполните задания. С вас 100к."
29 декабря 2024
Задача "Анализ данных о продажах с последующей визуализацией" Ура! Я первый решивший. А то уже раз 30 всё второй, да второй.
Vlad Tagunkov Уровень 38
3 января 2025
я вот пока все время третий :(