Группировка и агрегация данных в pandas
Введение в группировку и агрегацию данных в pandas
Pandas — это мощная библиотека для анализа данных в Python, которая предоставляет множество инструментов для работы с данными. Одной из ключевых возможностей pandas является группировка и агрегация данных. Эти операции позволяют вам эффективно обрабатывать и анализировать большие наборы данных, извлекая из них полезную информацию. В этой статье мы рассмотрим основные методы группировки и агрегации данных в pandas, а также приведем примеры их использования. Мы также обсудим, как комбинировать различные методы для достижения более сложных целей анализа данных.
Основные методы группировки данных
Метод groupby
Метод groupby
является основным инструментом для группировки данных в pandas. Он позволяет разделить DataFrame на группы по значению одного или нескольких столбцов. Это особенно полезно, когда вам нужно выполнить агрегатные операции, такие как суммирование, усреднение или подсчет значений в каждой группе.
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
. Это позволяет вам создавать более сложные группы и выполнять более детализированный анализ данных.
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
. Это позволяет вам получить сводную информацию о каждой группе.
aggregated = grouped.agg({'Value': 'sum'})
print(aggregated)
Примеры агрегатных функций
sum
: Сумма значений в группе.mean
: Среднее значение в группе.count
: Количество элементов в группе.min
: Минимальное значение в группе.max
: Максимальное значение в группе.
aggregated = grouped.agg({
'Value': ['sum', 'mean', 'count', 'min', 'max']
})
print(aggregated)
Применение нескольких агрегатных функций
Вы можете комбинировать несколько агрегатных функций для получения более детализированной информации о группах. Это позволяет вам одновременно получить несколько метрик для каждой группы.
aggregated = grouped.agg({
'Value': ['sum', 'mean', 'count']
})
print(aggregated)
Комбинирование группировки и агрегации
Метод apply
Метод apply
позволяет вам применять произвольные функции к каждой группе. Это особенно полезно, когда стандартные агрегатные функции не подходят для вашей задачи. Вы можете написать свою функцию и применить ее к каждой группе.
def custom_aggregation(group):
return group['Value'].sum() / group['Value'].count()
aggregated = grouped.apply(custom_aggregation)
print(aggregated)
Примеры использования метода apply
Метод apply
предоставляет большую гибкость в анализе данных. Например, вы можете использовать его для вычисления сложных метрик, которые не могут быть легко выражены с помощью стандартных агрегатных функций.
def range_aggregation(group):
return group['Value'].max() – group['Value'].min()
aggregated = grouped.apply(range_aggregation)
print(aggregated)
Примеры и практические упражнения
Пример 1: Анализ продаж
Предположим, у вас есть DataFrame с данными о продажах, и вы хотите узнать общую сумму продаж и среднюю цену продажи для каждого продукта. Это поможет вам понять, какие продукты приносят наибольший доход и какие из них имеют наибольшую среднюю цену.
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: Анализ посещаемости
Допустим, у вас есть данные о посещаемости студентов, и вы хотите узнать количество посещений и среднюю оценку для каждого студента. Это поможет вам понять, как часто студенты посещают занятия и как их посещаемость коррелирует с оценками.
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: Анализ производительности сотрудников
Предположим, у вас есть данные о производительности сотрудников, и вы хотите узнать общую сумму выполненных задач и среднее время выполнения задач для каждого отдела. Это поможет вам понять, какие отделы работают наиболее эффективно.
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: Анализ финансовых данных
Допустим, у вас есть данные о финансовых транзакциях, и вы хотите узнать общую сумму транзакций и среднюю сумму транзакции для каждого типа транзакции. Это поможет вам понять, какие типы транзакций являются наиболее значимыми.
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
и примените агрегатные функции для получения общей суммы зарплат и среднего стажа работы в каждом отделе. Это поможет вам понять, какие отделы имеют наибольший общий фонд заработной платы и какой средний стаж работы сотрудников в каждом отделе.
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 для анализа данных. Надеюсь, что эта статья была полезной и вы сможете применять полученные знания в своих проектах. 😉