Группировка и агрегация данных в pandas

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Введение в группировку и агрегацию данных в pandas

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

Кинга Идем в IT: пошаговый план для смены профессии

Основные методы группировки данных

Метод groupby

Метод groupby является основным инструментом для группировки данных в pandas. Он позволяет разделить DataFrame на группы по значению одного или нескольких столбцов. Это особенно полезно, когда вам нужно выполнить агрегатные операции, такие как суммирование, усреднение или подсчет значений в каждой группе.

Python
Скопировать код
import pandas as pd

data = {
    'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
    'Value': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)

grouped = df.groupby('Category')

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

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

Python
Скопировать код
data = {
    'Category': ['A', 'A', 'B', 'B', 'A', 'B'],
    'Subcategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
    'Value': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)

grouped = df.groupby(['Category', 'Subcategory'])

Применение агрегатных функций

Метод agg

После группировки данных, вы можете применять различные агрегатные функции, такие как sum, mean, count и другие, используя метод agg. Это позволяет вам получить сводную информацию о каждой группе.

Python
Скопировать код
aggregated = grouped.agg({'Value': 'sum'})
print(aggregated)

Примеры агрегатных функций

  • sum: Сумма значений в группе.
  • mean: Среднее значение в группе.
  • count: Количество элементов в группе.
  • min: Минимальное значение в группе.
  • max: Максимальное значение в группе.
Python
Скопировать код
aggregated = grouped.agg({
    'Value': ['sum', 'mean', 'count', 'min', 'max']
})
print(aggregated)

Применение нескольких агрегатных функций

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

Python
Скопировать код
aggregated = grouped.agg({
    'Value': ['sum', 'mean', 'count']
})
print(aggregated)

Комбинирование группировки и агрегации

Метод apply

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

Python
Скопировать код
def custom_aggregation(group):
    return group['Value'].sum() / group['Value'].count()

aggregated = grouped.apply(custom_aggregation)
print(aggregated)

Примеры использования метода apply

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

Python
Скопировать код
def range_aggregation(group):
    return group['Value'].max() – group['Value'].min()

aggregated = grouped.apply(range_aggregation)
print(aggregated)

Примеры и практические упражнения

Пример 1: Анализ продаж

Предположим, у вас есть DataFrame с данными о продажах, и вы хотите узнать общую сумму продаж и среднюю цену продажи для каждого продукта. Это поможет вам понять, какие продукты приносят наибольший доход и какие из них имеют наибольшую среднюю цену.

Python
Скопировать код
sales_data = {
    'Product': ['A', 'B', 'A', 'B', 'A', 'B'],
    'Sales': [100, 200, 150, 250, 200, 300],
    'Price': [10, 20, 15, 25, 20, 30]
}
df = pd.DataFrame(sales_data)

grouped = df.groupby('Product')
aggregated = grouped.agg({
    'Sales': 'sum',
    'Price': 'mean'
})
print(aggregated)

Пример 2: Анализ посещаемости

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

Python
Скопировать код
attendance_data = {
    'Student': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'],
    'Attendance': [1, 1, 1, 1, 1, 1],
    'Grade': [90, 85, 95, 80, 85, 90]
}
df = pd.DataFrame(attendance_data)

grouped = df.groupby('Student')
aggregated = grouped.agg({
    'Attendance': 'sum',
    'Grade': 'mean'
})
print(aggregated)

Пример 3: Анализ производительности сотрудников

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

Python
Скопировать код
performance_data = {
    'Department': ['HR', 'IT', 'HR', 'IT', 'HR', 'IT'],
    'Tasks_Completed': [50, 60, 55, 65, 52, 62],
    'Time_Spent': [5, 10, 6, 11, 7, 12]
}
df = pd.DataFrame(performance_data)

grouped = df.groupby('Department')
aggregated = grouped.agg({
    'Tasks_Completed': 'sum',
    'Time_Spent': 'mean'
})
print(aggregated)

Пример 4: Анализ финансовых данных

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

Python
Скопировать код
financial_data = {
    'Transaction_Type': ['Credit', 'Debit', 'Credit', 'Debit', 'Credit', 'Debit'],
    'Amount': [1000, 2000, 1500, 2500, 2000, 3000]
}
df = pd.DataFrame(financial_data)

grouped = df.groupby('Transaction_Type')
aggregated = grouped.agg({
    'Amount': 'sum',
    'Amount': 'mean'
})
print(aggregated)

Практическое упражнение

Попробуйте создать DataFrame с данными о сотрудниках компании, включающими столбцы Department, Salary, и Years_of_Service. Затем выполните группировку по Department и примените агрегатные функции для получения общей суммы зарплат и среднего стажа работы в каждом отделе. Это поможет вам понять, какие отделы имеют наибольший общий фонд заработной платы и какой средний стаж работы сотрудников в каждом отделе.

Python
Скопировать код
employee_data = {
    'Department': ['HR', 'IT', 'HR', 'IT', 'HR', 'IT'],
    'Salary': [50000, 60000, 55000, 65000, 52000, 62000],
    'Years_of_Service': [5, 10, 6, 11, 7, 12]
}
df = pd.DataFrame(employee_data)

grouped = df.groupby('Department')
aggregated = grouped.agg({
    'Salary': 'sum',
    'Years_of_Service': 'mean'
})
print(aggregated)

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

Читайте также