Groupby настолько мощный, что может показаться пугающим для новичков, но вам не нужно знать все его функции.
Нет необходимости оправдывать важность библиотеки pandas в мире науки о данных. Если вы используете Python, эта библиотека - незаменимый инструмент для любых задач по обработке данных. Одна универсальная функциональность библиотеки pandas построена на функции groupby
, которая создает объект GroupBy
, поддерживающий множество возможных операций.
Однако функциональность, связанная с groupby
, настолько мощна, что многим из нас так трудно запомнить все ее функции. Более того, еще одним заметным побочным эффектом универсальности является то, что новички могут потеряться в том, как использовать функцию groupby
. В этой статье я хотел бы рассмотреть 8 наиболее распространенных операций, которые мы можем выполнять с объектом GroupBy
.
1. Создайте таблицу частот.
Давайте сначала извлечем набор данных (знаменитый набор данных радужной оболочки глаза), который мы хотим использовать, как показано ниже.
Когда у нас есть записи данных с категориальными переменными, обычно нам нужно знать количество записей по группам. В этом случае мы можем создать таблицу частот, используя функцию size()
GroupBy
. Как видите, у нас есть 50 записей для каждого из трех видов.
Следует отметить, что мы создаем объект GroupBy
(т.е. iris_gb
), потому что в дальнейшем мы будем использовать его несколько раз.
2. Вычислить общую описательную статистику (например, среднее, минимальное, максимальное)
Чтобы вычислить средние по группам, мы просто воспользуемся функцией mean()
.
По умолчанию функция mean()
выполняет вычисление для всех числовых столбцов. Если вам нужны средства для определенных столбцов, мы можем указать это, как показано ниже.
Подобным образом мы можем вычислить минимум и максимум для каждой группы в объекте GroupBy
, используя функции min()
и max()
, как и функцию mean()
. Мы также можем рассчитать медианное значение и стандартное отклонение.
# Calculate the min iris_gb.min() # Calculate the max iris_gb.max() # Calculate the median iris_gb.median() # Calculate the SD iris_gb.std()
3. Найдите индекс максимума (или минимума)
Если вы хотите узнать индекс максимальной записи для каждой группы, вместо того, чтобы найти максимальную запись и найти ее индекс, есть удобная функция, которая выполняет эту работу напрямую. См. ниже.
Эта функция может быть полезной. Например, предположим, что мы хотим получить записи для записей с наибольшей длиной чашелистника, мы можем сделать следующее:
4. Сбросить индекс после Groupby
Иногда после groupby
обработки нам нужны дополнительные операции. В частности, мы хотим сбросить индекс группировки, чтобы сделать их регулярными строками и столбцами. Первый вариант - использовать функцию reset_index()
для созданного объекта DataFrame
.
Второй вариант еще более удобен, поскольку он устанавливает аргумент as_index
в функции groupby
.
5. Простое агрегирование нескольких операций
Технически мы можем выполнять несколько операций индивидуально, как показано выше. Однако эти операции можно выполнять, используя функцию agg()
объекта GroupBy
. Рассмотрим следующий тривиальный пример.
- Для наглядности мы рассчитываем результаты только для двух столбцов:
sepal_length
иpetal_length
. - В функции
agg
мы указываем имена функций, которые хотим применить. В этом случае мы просим вычислить минимальное и среднее значения для обоих столбцов.
6. Агрегации по столбцам
Когда мы хотим агрегировать некоторые вычисления, нам не всегда нужны одни и те же вычисления для всех столбцов. В этом случае мы можем запросить разные вычисления для разных столбцов. Учтите следующее:
В приведенном выше примере мы видим, что агрегирование вычисляет минимальное и максимальное значение для sepal_length
, а также среднее и стандартное значение для petal_length
. Синтаксис в основном передает словарь, в котором столбцы являются ключами, а функции вычислений - значениями.
7. Именованные агрегаты
Вы, возможно, заметили, что выходной файл не слишком удобен для пользователя из-за использования многоуровневого индекса. Соответственно, у вычисляемых полей не очень простые имена. Чтобы решить эту проблему, мы можем рассмотреть возможность именованной агрегации, как показано ниже.
В приведенном выше коде используется NamedAgg
, реализованный в pandas. Как видите, четыре вычисляемых столбца имеют правильные имена. Примечательно, что NamedAgg
- это своего рода именованные кортежи, и поэтому мы можем напрямую передавать кортежи в качестве ярлыка. Эквивалентный код ниже.
iris_gb.agg( sepal_min=("sepal_length", "min"), sepal_max=("sepal_length", "max"), petal_mean=("petal_length", "mean"), petal_std=("petal_length", "std") )
8. Используйте пользовательские функции.
Пока что функции, которые мы применяем в вычислениях, передаются по именам (например, «min», «mean»). Однако возможно, что мы можем напрямую передать объект функции. Обратите внимание на следующее.
Примечательно, что объекты функций можно использовать вместе с именами функций. Следующий код также является допустимым вызовом.
iris_gb.agg(["min", pd.Series.mean])
Кроме того, вы можете указать собственные функции. В следующем фрагменте кода показан тривиальный пример.
Поскольку лямбда-функции также являются функциями по своей сути, мы можем использовать лямбда-функцию с объектом GroupBy
, как показано ниже. Код эквивалентен приведенному выше фрагменту.
# Use a lambda function iris_gb.agg(lambda x: x.mean())
Выводы
В этой статье мы рассмотрели восемь наиболее распространенных операций, которые мы можем выполнять с объектом GroupBy
, используя функцию groupby в пандах. Конечно, это не исчерпывающий список функций, доступных с помощью объекта GroupBy
. Вместо этого они представляют собой лишь некоторые важные элементы, которые имеют отношение к большинству повседневных потребностей в обработке данных.