Как выполнить группировку и агрегацию данных в Pandas

Ответ

Группировка и агрегация данных в Pandas — это ключевая операция для анализа, выполняемая с помощью метода .groupby(). Он работает по принципу Split-Apply-Combine:

  1. Split: Данные разделяются на группы на основе значений в указанном столбце (или нескольких столбцах).
  2. Apply: К каждой группе применяется функция агрегации (например, sum(), mean(), count()).
  3. Combine: Результаты объединяются в новую структуру данных (обычно DataFrame или Series).

Практический пример:

Предположим, у нас есть DataFrame с данными о продажах в разных отделах:

import pandas as pd

data = {
    'department': ['Sales', 'IT', 'Sales', 'IT', 'IT'],
    'employee': ['John', 'Anna', 'Peter', 'Linda', 'Mike'],
    'sales': [200, 150, 300, 100, 250]
}
df = pd.DataFrame(data)

Задача: Посчитать общую сумму продаж и количество сотрудников для каждого отдела.

# Группируем данные по столбцу 'department'
# Применяем агрегирующие функции к столбцу 'sales'
agg_result = df.groupby('department')['sales'].agg(['sum', 'count'])

print(agg_result)

Результат выполнения:

            sum  count
department            
IT          500      3
Sales       500      2

Этот результат показывает, что в отделе IT было 3 продажи на общую сумму 500, а в отделе Sales — 2 продажи на ту же сумму. Метод .agg() позволяет применять сразу несколько функций, что делает код компактным и читаемым.

Ответ 18+ 🔞

А, слушай, вот эта штука с группировкой в пандасе — groupby() — это вообще, блядь, основа основ, без неё нихуя не проанализируешь. Работает она по принципу, который умные дядьки назвали Split-Apply-Combine, а по-нашему — «разделяй, властвуй и склеивай обратно».

  1. Split (Разъебать): Твои данные раскидываются по кучкам в зависимости от того, что написано в выбранном столбце. Скажем, всё, что про «Продажи», в одну кучу, всё про «IT» — в другую.
  2. Apply (Приложить): К каждой этой куче применяешь какую-нибудь функцию — посчитать сумму, среднее, количество, ну ты понял.
  3. Combine (Склеить): А потом результаты из всех кучек собираются обратно в одну красивую табличку.

Давай на живом примере, а то нихуя не понятно.

Допустим, есть у нас табличка с продажами по отделам:

import pandas as pd

data = {
    'department': ['Sales', 'IT', 'Sales', 'IT', 'IT'],
    'employee': ['John', 'Anna', 'Peter', 'Linda', 'Mike'],
    'sales': [200, 150, 300, 100, 250]
}
df = pd.DataFrame(data)

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

# Группируем всё по колонке 'department', а потом из этой кучи берём только 'sales'
# И говорим: «Примени-ка к этому вот сумму и посчитай количество записей»
agg_result = df.groupby('department')['sales'].agg(['sum', 'count'])

print(agg_result)

И что мы получаем на выходе, ёпта:

            sum  count
department            
IT          500      3
Sales       500      2

Вот, смотри, красота! Отдел IT: три продажи на общую сумму 500. Отдел Sales: две продажи, но тоже на 500. Метод .agg() — это вообще волшебная палочка, можно сразу кучу функций впихнуть, и всё красиво и понятно выходит. Не надо в цикле пиздеться, одним махом всё делается.