Получите максимум от функции GroupBy в Pandas

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

От базовых примеров к практическому упражнению

Фото Алекса Супруна на Unsplash.

Библиотека Python pandas включает в себя множество полезных инструментов для анализа и манипуляции данными, одним из которых является мощная функция GroupBy. Эта функция позволяет группировать наблюдения по различным категориям и выполнять агрегацию с ними по разным способам.

Вначале это может показаться запутанным, но в этом руководстве будет рассмотрено, как использовать эту функцию и ее различные возможности. В нем будет представлено:

  • Введение в GroupBy.
  • Применение GroupBy к практическим наборам данных.
  • Различные методы GroupBy.
  • Практическое упражнение и применение.

Код и данные:

Данные и блокнот Jupyter с полным кодом на языке Python, используемыми в этом руководстве, можно найти на связанной странице Github. Загрузите или склонируйте репозиторий, чтобы следовать инструкциям. В этом руководстве используются синтетические данные с поддельными именами, сгенерированными автором для этой статьи; данные доступны на связанной странице Github.

Для работы кода требуются следующие библиотеки:

# Обработка данных
import pandas as pd
import numpy as np
# Визуализация данных
import plotly.express as px

1.1. Начало работы – загрузка данных и основы GroupBy

Первым шагом является загрузка набора данных:

# Загрузка данных:
df = pd.read_csv('StudentData.csv')
df.head(3)

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

Скриншот автора

GroupBy в Pandas позволяет разделить фрейм данных на интересующие элементы и применить к ним некоторую функцию. Самый простой способ понять GroupBy – сформулировать вопрос, который решает операция GroupBy. Простейшая отправная точка – это узнать, сколько студентов сдали курс:

df.groupby('CoursePass')['CoursePass'].count()