Как эффективно использовать Pandas GroupBy

Как эффективно использовать Pandas GroupBy

Исходный узел: 1941381

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

 

Как эффективно использовать Pandas GroupBy
Изображение из Unsplash
 

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

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

Концепции усваиваются при хорошей практике, и это то, что мы собираемся сделать дальше, т.е. попрактиковаться с функцией Pandas groupby. Рекомендуется использовать Jupyter Notebook для этого руководства, поскольку вы можете видеть результат на каждом шаге.

Генерация демонстрационных данных

Импортируйте следующие библиотеки:

  • Pandas: чтобы создать фреймворк данных и применить группу
  • Random — для генерации случайных данных
  • Pprint — для печати словарей
import pandas as pd
import random
import pprint

 

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

df = pd.DataFrame()
names = [ "Sankepally", "Astitva", "Shagun", "SURAJ", "Amit", "RITAM", "Rishav", "Chandan", "Diganta", "Abhishek", "Arpit", "Salman", "Anup", "Santosh", "Richard",
] major = [ "Electrical Engineering", "Mechanical Engineering", "Electronic Engineering", "Computer Engineering", "Artificial Intelligence", "Biotechnology",
] yr_adm = random.sample(list(range(2018, 2023)) * 100, 15)
marks = random.sample(range(40, 101), 15)
num_add_sbj = random.sample(list(range(2)) * 100, 15) df["St_Name"] = names
df["Major"] = random.sample(major * 100, 15)
df["yr_adm"] = yr_adm
df["Marks"] = marks
df["num_add_sbj"] = num_add_sbj
df.head()

 

Бонусный совет — более простой способ выполнить ту же задачу — создать словарь всех переменных и значений, а затем преобразовать его в фрейм данных.

student_dict = { "St_Name": [ "Sankepally", "Astitva", "Shagun", "SURAJ", "Amit", "RITAM", "Rishav", "Chandan", "Diganta", "Abhishek", "Arpit", "Salman", "Anup", "Santosh", "Richard", ], "Major": random.sample( [ "Electrical Engineering", "Mechanical Engineering", "Electronic Engineering", "Computer Engineering", "Artificial Intelligence", "Biotechnology", ] * 100, 15, ), "Year_adm": random.sample(list(range(2018, 2023)) * 100, 15), "Marks": random.sample(range(40, 101), 15), "num_add_sbj": random.sample(list(range(2)) * 100, 15),
}
df = pd.DataFrame(student_dict)
df.head()

 

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

 

Как эффективно использовать Pandas GroupBy

Создание групп

Сгруппируем данные по тематике «Major» и применим групповой фильтр, чтобы посмотреть, сколько записей попадает в эту группу.

groups = df.groupby('Major')
groups.get_group('Electrical Engineering')

 

Итак, четыре студента относятся к специальности «Электротехника».

 

Как эффективно использовать Pandas GroupBy
 

Вы также можете группировать по более чем одному столбцу (Major и num_add_sbj в данном случае). 

groups = df.groupby(['Major', 'num_add_sbj'])

 

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

Давайте создадим группы, используя groupby в столбце «Major».

groups = df.groupby('Major')

Применение прямых функций

Допустим, вы хотите найти средние оценки по каждому специальному предмету. Что бы вы сделали? 

  • Выберите столбец «Отметки»
  • Применить среднюю функцию
  • Примените функцию округления, чтобы округлить знаки до двух знаков после запятой (необязательно)
groups['Marks'].mean().round(2)

 

Major
Artificial Intelligence 63.6
Computer Engineering 45.5
Electrical Engineering 71.0
Electronic Engineering 92.0
Mechanical Engineering 64.5
Name: Marks, dtype: float64

 

Совокупный

Другой способ добиться того же результата — использовать агрегатную функцию, как показано ниже:

groups['Marks'].aggregate('mean').round(2)

 

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

groups['Marks'].aggregate(['mean', 'median', 'std']).round(2)

 

Как эффективно использовать Pandas GroupBy
 

Но что, если вам нужно применить другую функцию к другому столбцу. Не волнуйся. Вы также можете сделать это, передав пару {column: function}.

groups.aggregate({'Year_adm': 'median', 'Marks': 'mean'})

 

Как эффективно использовать Pandas GroupBy

Трансформации

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

def standard_scalar(x): return (x - x.mean())/x.std()
groups.transform(standard_scalar)

 

Как эффективно использовать Pandas GroupBy
 

Обратите внимание, что «NaN» представляет группы с нулевым стандартным отклонением.

ФИЛЬТР

Возможно, вы захотите проверить, какая «специальность» неудовлетворительна, т. е. та, в которой средний балл учащегося составляет менее 60. Это требует от вас применения метода фильтрации к группам с функцией внутри него. В приведенном ниже коде используется лямбда-функция для достижения отфильтрованных результатов.

groups.filter(lambda x: x['Marks'].mean() 60)

 

Как эффективно использовать Pandas GroupBy

Во-первых,

Он дает вам свой первый экземпляр, отсортированный по индексу.

groups.first()

 

Как эффективно использовать Pandas GroupBy

Описывать

Метод «describe» возвращает базовую статистику, такую ​​как количество, среднее значение, стандартное значение, минимальное, максимальное значение и т. д. для заданных столбцов.

groups['Marks'].describe()

 

Как эффективно использовать Pandas GroupBy

Размер

Size, как следует из названия, возвращает размер каждой группы по количеству записей.

groups.size()

 

Major
Artificial Intelligence 5
Computer Engineering 2
Electrical Engineering 4
Electronic Engineering 2
Mechanical Engineering 2
dtype: int64

Граф и Нуник

«Count» возвращает все значения, тогда как «Nunique» возвращает только уникальные значения в этой группе.

groups.count()

 

Как эффективно использовать Pandas GroupBy

 

groups.nunique()

 

Как эффективно использовать Pandas GroupBy

Переименовывать

Вы также можете переименовать имя агрегированного столбца в соответствии с вашими предпочтениями.

groups.aggregate("median").rename( columns={ "yr_adm": "median year of admission", "num_add_sbj": "median additional subject count", }
)

 

Как эффективно использовать Pandas GroupBy
 

  • Четко определите цель groupby: Вы пытаетесь сгруппировать данные по одному столбцу, чтобы получить среднее значение другого столбца? Или вы пытаетесь сгруппировать данные по нескольким столбцам, чтобы получить количество строк в каждой группе?
  • Разберитесь с индексацией фрейма данных: Функция groupby использует индекс для группировки данных. Если вы хотите сгруппировать данные по столбцу, убедитесь, что столбец установлен как индекс, или вы можете использовать .set_index()
  • Используйте соответствующую агрегатную функцию: его можно использовать с различными функциями агрегирования, такими как mean(), sum(), count(), min(), max().
  • Используйте параметр as_index: Если установлено значение False, этот параметр указывает pandas использовать сгруппированные столбцы как обычные столбцы вместо индекса.

Вы также можете использовать groupby() в сочетании с другими функциями pandas, такими как pivot_table(), crosstab() и cut(), чтобы извлечь больше информации из ваших данных.

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

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

Отметка времени:

Больше от КДнаггетс