Bemind
Учебник Python
Учебник Python
  • Python
    • Python Lists
      • Списковые включения в Python (Полное руководство с примерами)
      • Исправление ValueError: Слишком Много Значений Для Распаковки в Python
      • Как добавить словарь в список в Python
      • Как добавить строку в список в Python
      • Разница между массивами и списками в Python
      • Python: Различия между списками и кортежами
      • Как проверить, пуст ли список в Python
      • Как Итерировать (Циклически Проходить) По Списку в Python
      • Python List sort(): Подробное руководство по сортировке списков
      • Python List Extend: Как добавить несколько элементов в список
      • Python: Найти Индекс Всех Вхождений Элемента в Списке
      • Конвертация списка словарей в Pandas DataFrame
      • Генерация случайных чисел в Python
      • Поиск Индекса в Списке Python: Найти Первое, Последнее или Все Вхождения
      • Добавить в начало списка в Python (Вставить в начало)
      • Найти дубликаты в списке Python
      • Python: Умножение Списков (6 Различных Способов)
      • Python списки: Полный обзор
      • Python: Выбор случайного элемента из списка
      • 4 Способа Очистить Список в Python
      • Объяснение ошибки IndexError в Python: индекс списка выходит за пределы допустимого диапазона
      • Python: Получение индекса максимального элемента в списке
      • Python: Объединение списков – Слияние списков (8 способов)
      • Python: Проверка наличия элемента в списке
      • Python: Проверка наличия элемента в списке
      • Удаление элемента из списка в Python (pop, remove, del, clear)
      • Как перевернуть список в Python (6 способов)
      • Python: Замена элемента в списке (6 различных способов)
      • Python: Удаление дубликатов из списка (7 способов)
      • Python: Преобразование словаря в список кортежей (4 простых способа)
      • Python: Перемешать Список (Случайное Распределение Элементов Списка в Python)
      • Python: Пересечение двух списков
      • Python: Вычитание двух списков (4 простых способа!)
      • Длина или Размер Списка в Python: 5 Способов Узнать Длину Списка
      • Python: Транспонирование списка списков (5 простых способов!)
      • Python: Разделение списка (Пополам, на части)
      • Python: Комбинации списка (Получить все комбинации списка)
      • Python: Выравнивание списка списков (4 способа)
      • Разница между списками в Python: Нахождение разницы между двумя списками Python
      • Python: Найти среднее значение списка или списка списков
      • Как добавлять элементы в списки в Python – 4 простых способа!
      • Списковые включения в Python (Полное руководство с примерами)
      • 6 способов преобразовать список Python в строку
    • Python Dictionaries
      • Понимание словаря Python (с примерами)
      • Исправляем ValueError: Слишком Много Значений Для Распаковки в Python
      • Как добавить словарь в список в Python
      • Преобразование JSON в словарь Python
      • Полное руководство по вложенным словарям в Python
      • Копирование словаря в Python: Полное руководство
      • Конвертация списка словарей в Pandas DataFrame
      • Поиск дубликатов в списке Python
      • Полный обзор словарей в Python
      • Python: Добавление пары Ключ:Значение в Словарь
      • Python: Сортировка словаря по значениям
      • Слияние Словарей в Python – Комбинирование Словарей (7 Способов)
      • Python: Удаление Дубликатов из Списка (7 Способов)
      • Python: Преобразование словаря в список кортежей (4 простых способа)
      • Python: Красивая Печать Словаря (Dictionary) – 4 Способа
      • Python: Проверка пуст ли словарь (5 способов!)
      • Copy of Python: Проверка пуст ли словарь (5 способов!)
      • Python: Проверьте, существует ли ключ (или значение) в словаре (5 простых способов)
      • Python: Проверьте, существует ли ключ (или значение) в словаре (5 простых способов)
      • Python: Получение Ключа Словаря с Максимальным Значением (4 Способа)
      • Python: Удаление ключа из словаря (4 разных способа)
      • Как красиво вывести JSON-файл в Python (6 методов)
    • Python Strings
      • Python Капитализация Строк: Руководство по Преобразованию слов в Заглавные
      • Python strip: Как обрезать строку в Python
      • Python Обратная Строка: Руководство по Реверсированию Строк
      • Как Удалить Префикс или Суффикс из Строки в Python
      • Преобразование строки в формат заголовка в Python с помощью str.title()
      • Как добавить строку в список в Python
      • Python String startswith: Проверка, начинается ли строка с подстроки
      • Python String endswith: Проверка того, заканчивается ли строка подстрокой
      • Как удалить первый или последний символ из строки в Python
      • Как исправить: SyntaxError в Python - EOL при сканировании строкового литерала
      • Python String Contains: Проверка Наличия Подстроки в Строке
      • Как проверить, пустая ли строка в Python
      • Python Новая Строка и Как Печатать Без Переноса Строки
      • Как Конкатенировать Строки в Python: Полное Руководство
      • Python: Подсчет слов в строке или файле
      • Как создать список алфавита в Python
      • Python: Конкатенация строки и целого числа (Int)
      • Python: Сортировка строки (4 различных способа)
      • Python zfill и rjust: Добавление нулей в строку в Python
      • Python: Целое в Двоичное (Преобразование целого числа в двоичную строку)
      • Python rfind: Нахождение индекса последней подстроки в строке
      • Python SHA256 хеширование алгоритм: объяснение
      • Python: Усечение числа с плавающей точкой (6 различных способов)
      • Выбор между методами Python isdigit(), isnumeric() и isdecimal()
      • Python: Удаление специальных символов из строки
      • Python Приведение Строки к Нижнему Регистру с помощью .lower(), .casefold(), и .islower()
      • Python программа для проверки, является ли строка палиндромом (6 методов)
      • Python: Найдите все перестановки строки (3 легких способа!)
      • Python: Удаление пунктуации из строки (3 разных способа!)
      • Python: Найти индекс (или все индексы) подстроки в строке
      • Python: Удаление символов новой строки из строки
      • Python: Удаление символа из строки (4 способа)
      • Python: Количество вхождений в строке (4 способа!)
    • Встроенные функции Python
      • abs()
      • ascii()
      • aiter()
      • all()
      • any()
      • anext()
      • bin()
      • bool()
      • breakpoint()
      • bytearray()
      • bytes()
      • callable()
      • chr()
      • classmethod()
      • compile()
      • complex()
      • delattr()
      • dict()
      • dir()
      • divmod()
      • enumerate()
      • eval()
      • exec()
      • filter()
      • float()
      • format()
      • frozenset()
      • getattr()
      • globals()
      • hasattr()
      • hash()
      • help()
      • hex()
      • id()
      • input()
      • int()
      • issubclass()
      • iter()
      • len()
      • list()
      • locals()
      • map()
      • max()
      • memoryview()
      • min()
      • next()
      • object()
      • oct()
      • open()
      • ord()
      • pow()
      • print()
      • property()
      • range()
      • repr()
      • reversed()
      • round()
      • set()
      • setattr()
      • isinstance()
      • slice()
      • zip()
      • type()
      • sorted()
      • staticmethod()
      • str()
      • sum()
      • super()
      • tuple()
      • vars()
      • import()
    • Cобеседования Python. Разбор реальных вопросов.
    • Встроенные методы в Python
  • Учебники по Pandas и Numpy
    • Numpy
      • Функция активации ReLU для глубокого обучения: полное руководство по выпрямленному линейному блоку
      • Как нормализовать массивы NumPy (минимальное-максимальное масштабирование, Z-оценка, L2)
      • NumPy where: Условная обработка элементов массива
      • NumPy linspace: создание равномерно расположенных массивов с помощью np.linspace
      • Как рассчитать векторное произведение в Python
      • Разделение NumPy: Разделение массива NumPy на части
      • NumPy: Лучшие способы применения функции к массиву
      • NumPy full: Создание массивов с заданным значением
      • NumPy clip(): Ограничьте значения массива минимальным и максимальным значениями
      • NumPy cumsum: Расчет кумулятивных сумм массивов NumPy
      • Изучаем функцию np.histogram в NumPy: создаем гистограмму
      • NumPy arange(): Полное руководство (с примерами)
      • Руководство по индексации и срезам массивов NumPy: Полное руководство
      • NumPy argmin(): Получение индекса минимального значения в массивах
      • Выравнивание массива с помощью NumPy flatten
      • Объединение массивов NumPy по различным осям с использованием функции stack
      • Удаление размерности из массивов NumPy с помощью NumPy Squeeze
      • Функция np.repeat() NumPy: Повторение массивов NumPy
      • Использование функции NumPy.exp() для вычисления экспоненты
      • Реализация функции сигмоида на Python
      • NumPy Pad: Использование np.pad() для дополнения массивов и матриц
      • np.argmax(): Как использовать NumPy Argmax
      • NumPy logspace: Понимание функции np.logspace()
      • Использование NumPy Tile для Расположения Массивов
      • NumPy Zeros: Создание массивов и матриц с нулями в NumPy
      • Использование числа Пи в Python (NumPy и Math)
      • Распределение Нормального (Гауссова) Распределения в Numpy (Случайное Нормальное в Numpy)
      • NumPy для Data Science на Python
      • Расчет скалярного произведения с использованием Numpy в Python
      • Расчет натурального логарифма на Python
    • Pandas
      • Python сводные таблицы – Полное руководство
      • Изучение API стиля Pandas
      • Объяснение группировки по нескольким столбцам в Pandas с примерами
      • Удаление индексной колонки DataFrame в Pandas: Руководство с примерами
      • Pandas Quantile: Расчет процентилей в DataFrame
      • Как рассчитать скользящее среднее (среднее арифметическое) в Pandas
      • Руководство по использованию метода fillna в Pandas для работы с отсутствующими данными в DataFrame
      • Pandas unique(): Получение уникальных значений в DataFrame
      • Распакуйте Ваши Данные с Помощью Функции Melt в Pandas
      • Pandas date_range: Как Создать Диапазон Дат в Pandas
      • Сброс индекса в Pandas: как сбросить индекс в Pandas
      • Pandas replace() – Замена значений в DataFrame Pandas
      • Перемещение столбца DataFrame Pandas на позицию (В начало и в конец)
      • Учебное пособие по Python Pandas: полное руководство
      • Pandas: Замена NaN на нули
      • Преобразование DataFrame Pandas в файл Pickle
      • Конвертация Pandas DataFrame в JSON
      • Преобразование DataFrame Pandas в Словарь
      • Преобразование Pandas DataFrame в Список
      • Чтение файлов Parquet в Pandas с помощью pd.read_parquet
      • Pandas dropna(): Удаление отсутствующих записей и столбцов в DataFrame
      • Как Добавить Новый Столбец в DataFrame Pandas
      • Подсчёт уникальных значений в Pandas
      • Отображение всех столбцов и строк в DataFrame Pandas
      • Pandas to_excel: Запись DataFrames в файлы Excel
      • Как использовать Pandas для чтения файлов Excel в Python
      • Преобразование списка словарей в Pandas DataFrame
      • Как добавить/вставить строку в DataFrame Pandas
      • Диаграмма рассеяния в Pandas: Как создать диаграмму рассеяния в Pandas
      • Pandas to_datetime: Преобразование строки Pandas в дату и время
      • Введение в Pandas для Data Science
      • Индексация, Выборка и Присваивание Данных в Pandas
      • Суммирование и Анализ Pandas DataFrame
      • Преобразование столбцов Pandas с помощью map и apply
      • Группировка данных в Pandas с использованием cut и qcut
      • Дата и время в Pandas и Python
      • Очистка и подготовка данных в Pandas и Python
      • Pandas GroupBy: группировка, суммирование и агрегация данных в Python
      • Pandas Дата и Время в Части Даты (месяц, год и т.д.)
      • Pandas: Получение номера строки из DataFrame
      • Вычисление Взвешенного Среднего в Pandas и Python
      • Как перемешать строки Pandas Dataframe в Python
      • Pandas: количество столбцов (подсчет столбцов в DataFrame)
      • Pandas Sum: сложение столбцов и строк DataFrame
      • Pandas Diff: Вычисление Разницы Между Строками Pandas
      • Нормализация столбца или датафрейма Pandas (с использованием Pandas или sklearn)
      • Функция Rank в Pandas: Ранжирование данных в Dataframe (Эквивалент SQL row_number)
      • Pandas Describe: Описательная статистика вашего Dataframe
      • Pandas Shift: Перемещение столбца DataFrame вверх или вниз
      • 7 Способов Выполнения Выборки Данных в Pandas
      • Экспорт DataFrame Pandas в CSV файл – Использование .to_csv()
      • Pandas: Итерация по строкам DataFrame в Pandas
      • Pandas: Преобразование значений столбца в строки
      • Дисперсия в Pandas: Вычисление дисперсии столбца в Pandas Dataframe
      • Pandas: Создание DataFrame из списков (5 способов!)
      • Pandas Rename Index: Как переименовать индекс DataFrame в Pandas
      • Pandas: Подсчёт уникальных значений в объекте GroupBy
      • Pandas: Добавить дни к колонке с датами
      • Среднее в Pandas: Как рассчитать среднее для одной или нескольких колонок
      • Pandas Column to List – Конвертируйте колонку Pandas в список
      • Транспонирование Dataframe в Pandas
      • Python: Разделение DataFrame Pandas
      • Как получить имена столбцов в DataFrame Pandas
      • Pandas: Количество строк в DataFrame (6 способов)
      • Создание пустого DataFrame Pandas и добавление данных
      • Как переименовать столбцы в Pandas DataFrame (с примерами)
      • Изменение порядка столбцов в Pandas: использование метода reindex и метода insert
      • Pandas get_dummies (One-Hot кодирование), объяснение
      • Относительные и Абсолютные Частоты в Python и Pandas
      • Финансовый год – Определение финансового года в Pandas
      • Как сортировать данные в DataFrame Pandas
  • Учебники Matplotlib и Seaborn
    • Seaborn
      • Регрессионные графики в Seaborn с использованием regplot и lmplot
      • Seaborn residplot – Построение остатков линейной регрессии
      • Seaborn jointplot() – Создание совместных графиков в Seaborn
      • Seaborn displot – Распределенческие графики в Python
      • Seaborn ecdfplot – Эмпирические функции накопленного распределения
      • Seaborn rugplot – Визуализация маргинальных распределений
      • Seaborn kdeplot – Создание графиков оценки плотности ядра
      • Seaborn histplot – Создание Гистограмм в Seaborn
      • Seaborn catplot – Визуализация категориальных данных в Python
      • Средняя тенденция для категориальных данных в Seaborn Pointplot
      • Seaborn stripplot: Jitter Plots для распределений категориальных данных
      • Seaborn Countplot – Подсчет категориальных данных в Python
      • Seaborn swarmplot: Bee Swarm Plots для распределения категориальных данных
      • Скрипичные графики Seaborn в Python: Полное руководство
      • Настройка расположения легенд Seaborn, меток, текста и т.д.
      • Тепловая карта Seaborn: Полное руководство
      • Создание многосекционных сеток в Seaborn с помощью FacetGrid
      • Удаление рамки в Seaborn: Как работать с рамкой
      • Заголовки и метки осей в Seaborn: добавление и настройка
      • Как установить Seaborn в Python (Исправление: no module named seaborn)
      • Seaborn relplot – Создание точечных и линейных графиков
      • Полное руководство по созданию точечных диаграмм (scatter plots) в Python с использованием Seaborn
    • Matplotlib
      • Режим Retina в Matplotlib: Улучшение Качества Графиков
      • Как построить функцию в Python с использованием Matplotlib
      • Как создать 3D-диаграммы рассеяния в Matplotlib
      • Как изменить размер шрифта в графике Matplotlib
      • Установка размера маркера в точечных диаграммах Matplotlib
      • Как изменить размер графика и фигуры в Matplotlib
      • Как добавить названия в Matplotlib: Заголовок, Подзаголовок, Названия Осей
      • Pandas Scatter Plot: Как создать диаграмму рассеяния в Pandas
      • Построение графиков в Python с помощью Matplotlib
      • Диаграммы рассеяния Matplotlib – Все, что вам нужно знать
      • Диаграммы с столбцами в Matplotlib – Узнайте все, что вам нужно знать
      • Линейные диаграммы Matplotlib – Всё, что вам нужно знать
      • Построение гистограммы в Python с Matplotlib и Pandas
  • Алгоритмы
    • Алгоритм поиска в ширину (BFS) в Python
    • Алгоритм поиска в глубину (DFS) на Python
  • AI создает хедж-фонд для анализа акций на Python
Powered by GitBook
On this page
  • Что такое метод GroupBy в Pandas?
  • Загрузка образца Pandas DataFrame
  • Понимание группирования объектов Pandas
  • Понимание Pandas GroupBy Разделение-Применение-Объединение
  • Агрегирование данных с помощью Pandas GroupBy
  • Преобразование данных с помощью Pandas GroupBy
  • Фильтрация данных с помощью Pandas GroupBy
  • Группировка Pandas DataFrame по нескольким столбцам
  • Использование пользовательских функций с Pandas GroupBy
  • Полезные примеры Pandas GroupBy
  • Упражнения
  • Заключение и резюме
  • Дополнительные ресурсы
  1. Учебники по Pandas и Numpy
  2. Pandas

Pandas GroupBy: группировка, суммирование и агрегация данных в Python

PreviousОчистка и подготовка данных в Pandas и PythonNextPandas Дата и Время в Части Даты (месяц, год и т.д.)

Last updated 2 months ago

Метод groupby в Pandas — это невероятно мощный инструмент, который помогает получить эффективное и значимое понимание вашего набора данных. Всего в нескольких простых строках кода вы можете агрегировать данные в чрезвычайно понятные и мощные формы.

В конце этого руководства вы научитесь работать с методом .groupby() из библиотеки Pandas, используя разбиение-применение-сочетание. Этот процесс эффективно обрабатывает большие наборы данных для манипуляции данными очень мощными способами. Вы научитесь полностью освоить метод, включая доступ к группам, преобразование данных и создание производных данных.

Оглавление

Что такое метод GroupBy в Pandas?

Метод Pandas .groupby() работает аналогично оператору SQL GROUP BY. На самом деле, он разработан чтобы быть похожим на свой аналог в SQL, используя его эффективность и интуитивность. Подобно оператору GROUP BY в SQL, метод Pandas работает путем разделения данных, их агрегирования заданным образом (или способами) и повторной комбинации данных осмысленным образом.

Поскольку метод .groupby() сначала разделяет данные, мы можем работать с группами напрямую. Так как агрегация выполняется после разделения, у нас есть полная свобода в том, как агрегировать данные. Pandas затем объединяет данные, чтобы представить их в виде осмысленного DataFrame.

Что замечательно в этом, так это то, что он позволяет нам использовать метод по-разному, особенно творчески. Благодаря этому метод является основой для понимания, как Pandas можно использовать для манипуляции и анализа данных. Длина этого руководства отражает его сложность и важность!

Почему Pandas предлагает несколько способов агрегации данных?

Pandas предоставляет множество вариантов для анализа и агрегации данных. Почему существует, казалось бы, так много пересекающихся методов? Ответ заключается в том, что каждый метод, такой как .pivot(), .pivot_table(), .groupby(), предлагает уникальный подход к агрегации данных. Они не просто являются переименованными версиями, а представляют собой полезные способы для выполнения различных задач.

Загрузка образца Pandas DataFrame

Чтобы следовать этому руководству, давайте загрузим пример DataFrame из библиотеки Pandas. Загрузим воображаемые данные о продажах, используя набор данных, размещенный на странице datagy на Github. Если вы хотите следовать инструкции шаг за шагом, скопируйте приведенный ниже код для загрузки набора данных с помощью метода .read_csv()

# Загрузка образцового DataFrame из файла CSV с датами в столбце 'date'
import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/datagy/data/main/sales.csv', parse_dates=['date'])
print(df.head())

# Вывод:
#         date  gender      region  sales
# 0 2022-08-22    Male  North-West  20381
# 1 2022-03-05    Male  North-East  14495
# 2 2022-02-09    Male  North-East  13510
# 3 2022-06-22    Male  North-East  15983
# 4 2022-08-10  Female  North-West  15007

Вывод первых пяти строк с помощью метода .head() дает некоторое представление о наших данных. Видно, что у нас есть столбец date, содержащий дату транзакции. У нас есть строковые столбцы, охватывающие gender и region нашего продавца. Наконец, у нас есть целочисленный столбец sales, представляющий общую стоимость продаж.

Понимание группирования объектов Pandas

Давайте впервые взглянем на метод Pandas .groupby(). Мы можем создать объект GroupBy, применив метод к нашему DataFrame и передав либо столбец, либо список столбцов. Посмотрим, как это выглядит: создадим объект GroupBy и выведем его на экран.

# Создание объекта группировки DataFrame Pandas по столбцу 'region'
print(df.groupby('region'))

# Вывод:
# <pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fb78815a4f0>

Pandas GroupBy Attributes

Например, эти объекты имеют атрибут .ngroups, который содержит количество групп, доступных в этом групп

# Подсчет количества групп в объекте группировки DataFrame Pandas по столбцу 'region'
print(df.groupby('region').ngroups)

# Вывод:
# 3

Мы можем увидеть, что наш объект имеет 3 группы. Аналогично, мы можем использовать атрибут .groups, чтобы получить представление о специфике получившихся групп. Вывод этого атрибута — это объект, похожий на словарь, который содержит наши группы в качестве ключей. Значения этих ключей — это индексы строк, принадлежащих этой группе!

# Доступ к группам в объекте группировки DataFrame Pandas по столбцу 'region'
print(df.groupby('region').groups)

# Вывод:
# {'North-East': [1, 2, 3, ...], 'North-West': [0, 4, 7, ...], 'South': [5, 6, 8, ...]}

Если мы хотим увидеть только названия групп нашего объекта GroupBy, мы можем просто вернуть только ключи этого словаря.

# Доступ только к именам групп в объекте группировки DataFrame PandAs по столбцу 'region'
print(df.groupby('region').groups.keys())

# Вывод:
# dict_keys(['North-East', 'North-West', 'South'])

Мы можем видеть, насколько полезен этот метод! Он позволяет нам группировать данные значимым образом.

Выбор группы PandasПо группе

Мы также можем выбрать все записи, принадлежащие определенной группе. Это может быть полезно, если вы хотите увидеть данные каждой группы. Чтобы сделать это, мы можем применить метод .get_group() и передать имя группы, которую мы хотим выбрать. Давайте попробуем выбрать регион 'South' из нашего объекта GroupBy:

# Выбор группы из объекта группировки DataFrame Pandas по столбцу 'region'
print(df.groupby('region').get_group('South'))

# Вывод:
#           date  gender region  sales
# 5   2022-09-06    Male  South  21792
# 6   2022-08-21    Male  South  20113
# 8   2022-11-22    Male  South  14594
# 9   2022-01-16  Female  South  24114
# 10  2022-12-21    Male  South  35154
# ..         ...     ...    ...    ...
# 972 2022-06-09    Male  South  22254
# 979 2022-11-24  Female  South  25591
# 981 2022-12-05    Male  South  34334
# 985 2022-12-01  Female  South  21282
# 994 2022-09-29    Male  South  21255

# [331 rows x 4 columns]

Это может быть весьма полезно, если вы хотите получить некоторое представление о данных. Аналогично, это дает вам понимание того, как метод .groupby() на самом деле используется для агрегирования данных. В следующем разделе вы узнаете, как работает метод Pandas groupby, используя методологию разделения, применения и объединения.

Понимание Pandas GroupBy Разделение-Применение-Объединение

Метод groupby в Pandas использует процесс, известный как "разделяй, применяй и объединяй", для полезной агрегации или модификации DataFrame. Этот процесс работает точно так, как и назван.

  1. Разделение данных на группы в зависимости от определенных критериев

  2. Применение функции к каждой группе независимо

  3. Объединение результатов в подходящую структуру данных

В предыдущем разделе, когда вы применили метод .groupby() и передали в него столбец, вы уже выполнили первый шаг! Вы смогли разделить данные на соответствующие группы, основываясь на переданных вами критериях.

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

Использование Split-Apply-Combine без GroupBy

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

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

  2. Применение функции агрегации: Оттуда мы можем выбрать строки из DataFrame, соответствующие условию, и применить к ним функцию.

  3. Объединение данных наконец, мы можем создать словарь и добавить в него данные, а затем преобразовать обратно в DataFrame Pandas.

# Репликация процесса split-apply-combine без использования GroupBy

# Создание контейнерного словаря для хранения средних значений по каждой группе
averages = {}

# Разделение данных на различные регионы
for region in df['region'].unique():
    tempdf = df[df['region'] == region]

    # Применение функции агрегации для вычисления среднего значения продаж
    average = tempdf['sales'].mean()

    # Сборка данных в DataFrame
    averages[region] = [average]

# Создание DataFrame из словаря с средними значениями по каждому региону
aggregate_df = pd.DataFrame.from_dict(averages, orient='index', columns=['Average Sales'])
print(aggregate_df)

# Вывод:
#             Average Sales
# North-West   15257.732919
# North-East   17386.072046
# South        24466.864048

Это много кода, чтобы написать для простой агрегации! К счастью, метод groupby в Pandas делает это намного проще. В следующем разделе вы узнаете, как значительно упростить этот процесс.

Агрегирование данных с помощью Pandas GroupBy

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

# Агрегация данных с использованием метода .groupby() из библиотеки Pandas

averages = df.groupby('region')['sales'].mean()
print(averages)

# Вывод:
# region
# North-East    17386.072046
# North-West    15257.732919
# South         24466.864048
# Name: sales, dtype: float64

Посмотрите на код! Мы смогли сократить шесть строк кода до одной! Давайте разберем это по элементам:

  1. df.groupby('region') вам уже знакомо. Оно разделяет данные на различные группы на основе столбца region.

  2. ['sales'] выбирает только этот столбец из групп

  3. .mean() применяет метод вычисления среднего для каждого столбца в группе.

  4. Данные объединены в результирующий DataFrame, averages

Давайте более наглядно рассмотрим весь процесс. Чтобы упростить понимание, давайте посмотрим только на первые семь записей DataFrame:

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

Другие агрегации с Pandas GroupBy

Теперь, когда вы понимаете, как работает процедура разделения, применения и объединения, давайте рассмотрим некоторые другие способы агрегации в Pandas. Таблица ниже предоставляет обзор доступных функций агрегации:

Aggregation Method
Description

.count()

Количество ненулевых записей

.sum()

Сумма значения

.mean()

Среднее арифметическое значений

.median()

Медиана значений

.min()

Минимальное значение группы

.max()

Максимальное значение группы

.mode()

Наиболее часто встречающееся значение в группе

.std()

Стандартное отклонение группы

.var()

Дисперсия группы

# Вычисление стандартного отклонения продаж для каждой группы по региону

standard_deviations = df.groupby('region')['sales'].std()
print(standard_deviations)

# Вывод:
# region
# North-East    2032.541552
# North-West    3621.456493
# South         5253.702513
# Name: sales, dtype: float64

Применение множественных агрегаций с использованием Pandas GroupBy

Pandas также предоставляет дополнительный метод .agg(), который позволяет применять несколько агрегирующих функций в методе .groupby(). Этот метод позволяет передавать список вызовов (т. е. функции без скобок). Давайте посмотрим, как мы можем использовать некоторые функции из библиотеки numpy для агрегации.

# Применение нескольких агрегатных функций с использованием метода .agg()

import numpy as np

aggs = df.groupby('region')['sales'].agg([np.mean, np.std, np.var])
print(aggs)

# Вывод:
#                     mean          std           var
# region                                             
# North-East  17386.072046  2032.541552  4.131225e+06
# North-West  15257.732919  3621.456493  1.311495e+07
# South       24466.864048  5253.702513  2.760139e+07

Метод .agg() позволяет легко генерировать сводные статистические данные по различным группам. Без этого нам пришлось бы применять метод .groupby() три раза, но здесь мы смогли сократить это до одного вызова метода!

Преобразование данных с помощью Pandas GroupBy

Еще один невероятно полезный способ использовать метод groupby в Pandas — это трансформация данных. Что это значит? Трансформируя данные, вы выполняете операцию, специфичную для этой группы. Это может включать, например, стандартизацию данных только на основе этой группы с использованием z-оценки или заполнение отсутствующих данных, вводя значение на основе этой группы.

Операция трансформации отличается от агрегации и фильтрации с использованием .groupby(), тем что результирующий DataFrame имеет такие же размеры, как и исходные данные. Хотя это может быть верно для агрегации и фильтрации, для трансформации это всегда верно.

Метод .transform() вернет одно значение для каждой записи в оригинальном наборе данных. Поэтому, гарантируется, что размер результата будет совпадать.

Использование .transform в GroupBy

Давайте рассмотрим пример преобразования данных в Pandas DataFrame. В этом примере мы рассчитаем, какой процент от общих продаж региона составляет каждая продажа. Для этого мы можем применить метод .transform() к объекту GroupBy. Мы можем передать функцию 'sum', чтобы вернуть сумму для всей группы в каждой строке. Наконец, мы делим исходный столбец 'sales' на эту сумму.

Давайте посмотрим, как выглядит этот код:

# Вычисление процента продаж региона

df['Percent Of Region Sales'] = df['sales'] / df.groupby('region')['sales'].transform('sum')
print(df.head())

# Вывод:
#         date  gender      region  sales  Percent Of Region Sales
# 0 2022-08-22    Male  North-West  20381                 0.004148
# 1 2022-03-05    Male  North-East  14495                 0.002403
# 2 2022-02-09    Male  North-East  13510                 0.002239
# 3 2022-06-22    Male  North-East  15983                 0.002649
# 4 2022-08-10  Female  North-West  15007                 0.003055

В полученной таблице видно, какую часть от общего объема продаж в регионе составила каждая продажа.

Преобразование данных без .transform

В предыдущем разделе вы преобразовали данные с помощью функции .transform(), но мы также можем применить функцию, которая вернет одно значение без агрегации. Например, давайте применим метод .rank() к нашей группировке. Это позволит нам ранжировать значения в каждой группе. Вместо использования метода .transform(), мы непосредственно применим метод .rank()

# Преобразование DataFrame с использованием GroupBy

df['ranked'] = df.groupby('region')['sales'].rank(ascending=False)
print(df.sort_values(by='sales', ascending=False).head())

# Вывод:
#           date  gender region  sales  ranked
# 61  2022-02-22  Female  South  43775     1.0
# 673 2022-04-19    Male  South  37878     2.0
# 111 2022-10-31  Female  South  36444     3.0
# 892 2022-09-05    Male  South  35723     4.0
# 136 2022-02-27    Male  South  35485     5.0

В этом случае метод .groupby() возвращает серию Pandas такой же длины, как и исходный DataFrame. Поэтому мы можем просто присвоить эту серию новому столбцу.

Фильтрация данных с помощью Pandas GroupBy

Замечательный способ использования метода .groupby() — фильтрация DataFrame. Этот подход значительно отличается от обычной фильтрации, так как позволяет применять метод фильтрации на основе некоторых агрегаций значений группы. Например, мы можем отфильтровать наш DataFrame, чтобы удалить строки, где средняя цена продажи группы меньше 20,000.

# Фильтрация строк, где средняя цена продаж в группе меньше 20,000

df = df.groupby('region').filter(lambda x: x['sales'].mean() < 20000)
print(df.head())

# Вывод:
#         date  gender      region  sales
# 0 2022-08-22    Male  North-West  20381
# 1 2022-03-05    Male  North-East  14495
# 2 2022-02-09    Male  North-East  13510
# 3 2022-06-22    Male  North-East  15983
# 4 2022-08-10  Female  North-West  15007

Let’s break down how this works:

  1. We group our data by the 'region' column

  2. We apply the .filter() method to filter based on a lambda function that we pass in

  3. The lambda function evaluates whether the average value found in the group for the 'sales' column is less than 20,000

Этот подход избавляет нас от необходимости сначала определять среднее значение для каждой группы, а затем отфильтровывать эти значения. В данном примере подход может показаться немного излишним. Однако он открывает огромный потенциал при работе с более мелкими группами.

Группировка Pandas DataFrame по нескольким столбцам

Мы можем расширить функциональность метода Pandas .groupby(), группируя данные по нескольким столбцам. Ранее вы группировали DataFrame только по одному столбцу, передавая строку, представляющую столбец. Однако можно также передать список строк, представляющих различные столбцы. Это позволяет разделить данные еще более детально.

Давайте вычислим сумму всех продаж, разделенных по 'region' и по 'gender' , написав.

# Агрегация данных по нескольким столбцам

sums = df.groupby(['region', 'gender'])['sales'].sum()
print(sums.head())

# Вывод:
#                      sales
# region     gender         
# North-East Female  3051132
#            Male    2981835
# North-West Female  2455899
#            Male    2457091
# South      Female  4135688

Более того, все методы, которые мы рассмотрели ранее, также возможны и в этом случае. Например, мы могли бы применить функцию .rank() снова и определить топ-продажи в каждой комбинации регион

# Ранжирование продаж по регионам и полам

df['rank'] = df.groupby(['region', 'gender'])['sales'].rank(ascending=False)
print(df.head())

# Вывод:
#         date  gender      region  sales   rank
# 0 2022-08-22    Male  North-West  20381   11.0
# 1 2022-03-05    Male  North-East  14495  154.0
# 2 2022-02-09    Male  North-East  13510  168.0
# 3 2022-06-22    Male  North-East  15983  138.0
# 4 2022-08-10  Female  North-West  15007   89.5

Использование пользовательских функций с Pandas GroupBy

Еще одна отличная функция метода .groupby() в Pandas заключается в том, что мы можем применять наши собственные функции. Это позволяет определять функции, которые соответствуют потребностям нашего анализа. Вы уже видели это в примере фильтрации с использованием метода .groupby(). Мы можем использовать либо анонимную лямбда-функцию, либо сначала определить функцию и применить ее.

Давайте посмотрим, как это может работать. Мы можем определить пользовательскую функцию, которая будет возвращать диапазон группы, вычисляя разницу между минимальным и максимальным значениями. Давайте определим эту функцию и применим её к нашему вызову метода .groupby() .

# Использование пользовательской функции в объекте GroupBy

def group_range(x):
    return x.max() - x.min()

ranges = df.groupby(['region', 'gender'])['sales'].apply(group_range)
print(ranges)

# Вывод:
# region      gender
# North-East  Female    10881
#             Male      10352
# North-West  Female    20410
#             Male      17469
# South       Female    30835
#             Male      27110
# Name: sales, dtype: int64

Функция group_range() принимает один параметр, который в данном случае представляет собой серии наших группировок 'sales'. Мы находим наибольшее и наименьшее значения и возвращаем разницу между ними. Это может быть полезно для оценки различий в диапазонах разных групп.

Полезные примеры Pandas GroupBy

В этом разделе вы узнаете о полезных вариантах использования метода Pandas .groupby(). Примеры в этом разделе призваны продемонстрировать более креативные способы использования метода. Эти примеры предназначены для вдохновения и расширения вашего понимания различных способов использования метода.

Получение первых n строк группы PandasАвтор

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

Давайте рассмотрим, как вернуть две записи из каждой группы, где каждая группа определяется регионом и полом:

# Возврат первых двух записей из каждого группы

print(df.groupby(['region', 'gender']).head(2))

# Вывод:
#          date  gender      region  sales
# 0  2022-08-22    Male  North-West  20381
# 1  2022-03-05    Male  North-East  14495
# 4  2022-08-10  Female  North-West  15007
# 5  2022-09-06    Male       South  21792
# 7  2022-07-08    Male  North-West  13650
# 9  2022-01-16  Female       South  24114
# 11 2022-04-30  Female  North-West  19631
# 12 2022-11-25  Female  North-East  18262
# 13 2022-08-14  Female  North-East  13733
# 20 2022-01-21  Female       South  32313

Получение n-го самого большого ряда группы PandasАвтор

В этом примере вы узнаете, как выбрать n-е по величине значение в заданной группе. Для этого мы можем использовать метод .nlargest(), который вернет n-е по величине значение. Например, если мы хотим вернуть второе по величине значение в каждой группе, мы можем просто передать значение 2. Давайте посмотрим, как это выглядит:

# Получение второй по величине значения в каждой группе

print(df.groupby(['region', 'gender'])['sales'].nlargest(2))

# Вывод:
# region      gender     
# North-East  Female    407    22545.0
#             Male      560    22361.0
#                     442    21951.0
# North-West  Female    758    26813.0
#             Male      844    23553.0
#                     576    23485.0
# South       Female    61     43775.0
#             Male      673    37878.0
#                     892    35723.0
# Name: sales, dtype: float64

Упражнения

Пора проверить свои знания! Используйте упражнения ниже, чтобы попрактиковаться в использовании метода .groupby(). Решения можно найти, нажав на раздел под каждым вопросом.

Вернуть DataFrame, содержащий минимальное значение дат для каждого региона.
print(df.groupby('region')['date'].min())

# Returns:
# region
# North-East   2022-01-02
# North-West   2022-01-02
# South        2022-01-04
# Name: date, dtype: datetime64[ns]
Какое наименьшее стандартное отклонение продаж?
print(df.groupby('region')['sales'].std().min())
# Вывод:
# 2032.5415517362096
Как вернуть последние 2 строки каждой группы по региону и полу?
print(df.groupby(['region', 'gender']).tail(2))

# Вывод:
#           date  gender      region  sales
# 979 2022-11-24  Female       South  25591
# 981 2022-12-05    Male       South  34334
# 985 2022-12-01  Female       South  21282
# 988 2022-07-10    Male  North-West  12500
# 990 2022-07-07  Female  North-East  16468
# 993 2022-06-11    Male  North-West  14942
# 994 2022-09-29    Male       South  21255
# 995 2022-06-02  Female  North-West  14015
# 996 2022-05-20  Female  North-East  15503
# 997 2022-04-02    Male  North-East  18714
# 998 2022-12-07    Male  North-East  19910
# 999 2022-12-19  Female  North-West  16589

Заключение и резюме

В этом уроке вы узнали о методе .groupby() в Pandas. Этот метод позволяет анализировать, агрегировать, фильтровать и преобразовывать ваши данные множеством полезных способов. Ниже вы найдёте краткое резюме метода .groupby() в Pandas:

  • Метод .groupby() в Pandas позволяет выполнять агрегирование, преобразование и фильтрацию DataFrame

  • Метод работает с использованием операций разделения, преобразования и применения

  • Вы можете сгруппировать данные по нескольким столбцам, передав список столбцов

  • Вы можете легко применять несколько агрегатов, используя метод .agg()

  • Вы можете использовать метод для преобразования ваших данных полезными способами, такими как вычисление z-оценок или ранжирование данных по различным группам.

Дополнительные ресурсы

To learn more about related topics, check out the tutorials below:

  • Pandas: подсчет уникальных значений в объекте GroupBy

  • Python Defaultdict: обзор и примеры

  • Вычислить средневзвешенное значение в Pandas и Python

Мы видим, что это вернуло . Поскольку это объект, мы можем изучить некоторые его атрибуты.

Understanding how the split-apply-combine procedure works in Pandas .groupby()

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

Официальную документацию для метода Pandas .groupby() можно

объект типа DataFrameGroupBy
найти здесь
Что такое метод GroupBy в Pandas?
Загрузка образца Pandas DataFrame
Понимание группирования объектов Pandas
Понимание Pandas GroupBy Разделение-Применение-Объединение
Агрегирование данных с помощью Pandas GroupBy
Преобразование данных с помощью Pandas GroupBy
Фильтрация данных с помощью Pandas GroupBy
Группировка Pandas DataFrame по нескольким столбцам
Использование пользовательских функций с Pandas GroupBy
Полезные примеры Pandas GroupBy
Упражнения
Заключение и резюме
Дополнительные ресурсы
вычислить стандартное отклонение
Understanding Split Apply and Combine in Pandas GroupBy