Группировка данных и агрегация с использованием метода groupby
Метод groupby в Pandas позволяет группировать данные по значениям одного или нескольких столбцов и выполнять агрегацию или другие операции над каждой группой. Это мощный инструмент для анализа данных, позволяющий легко выполнять вычисления на основе групп.
Основные операции с groupby
Основы использования groupby
Метод groupby делит данные на группы по значениям одного или нескольких столбцов и позволяет применять различные функции к каждой группе.
import pandas as pd# Создание DataFramedf = pd.DataFrame({'Category': ['A', 'B', 'A', 'B', 'A'],'Values': [10, 20, 30, 40, 50]})# Группировка по столбцу 'Category'grouped = df.groupby('Category')# Применение функции к каждой группеmean_values = grouped.mean()print(mean_values)
Агрегация данных
Для выполнения группировки данных по определенному столбцу и применения агрегации (например, суммы) в Pandas, можно использовать метод groupby() в сочетании с методами агрегации, такими как sum(), mean(), count() и т.д.
Вот пример того, как это сделать:
import pandas as pd# Создание DataFramedata ={'Категория': ['A','B','A','C','B','A','C'],'Значение': [10,15,10,20,15,30,25]}df = pd.DataFrame(data)# Группировка по столбцу 'Категория' и применение суммированияresult = df.groupby('Категория')['Значение'].sum()print(result)
Описание:
df.groupby('Категория'): Группировка данных по столбцу 'Категория'.
['Значение'].sum(): Применение суммы к столбцу 'Значение' в каждой группе.
Результат:
КатегорияA 50B 30C 45Name: Значение, dtype: int64
Этот код создаёт DataFrame, группирует его по столбцу 'Категория' и вычисляет сумму значений в столбце 'Значение' для каждой категории.
После группировки вы можете использовать методы агрегации для выполнения вычислений, таких как сумма, среднее значение, максимум и минимум.
Вы можете применять свои функции к каждой группе с помощью метода apply().
# Определение пользовательской функцииdefcustom_func(group):return pd.Series({'Sum': group['Values'].sum(),'Range': group['Values'].max() - group['Values'].min() })# Применение пользовательской функцииresult = grouped.apply(custom_func)print(result)
Фильтрация групп
Метод filter() позволяет фильтровать группы по условию.
# Фильтрация групп, где сумма значений больше 50filtered_groups = grouped.filter(lambdax: x['Values'].sum() >50)print(filtered_groups)
Агрегация с использованием нескольких столбцов
Вы можете выполнять агрегацию по нескольким столбцам.
# Создание DataFrame с несколькими столбцамиdf = pd.DataFrame({'Category': ['A', 'B', 'A', 'B', 'A'],'Values1': [10, 20, 30, 40, 50],'Values2': [5, 10, 15, 20, 25]})# Группировка по столбцу 'Category'grouped = df.groupby('Category')# Агрегация по нескольким столбцамaggregated = grouped.agg({'Values1': 'sum','Values2': 'mean'})print(aggregated)
Переиндексация после группировки
После группировки и агрегации, вы можете использовать метод reset_index() для переиндексации.
# Переиндексация после группировкиresult_reset = aggregated.reset_index()print(result_reset)
Примеры полного кода
import pandas as pd# Создание DataFramedf = pd.DataFrame({'Category': ['A', 'B', 'A', 'B', 'A'],'Values': [10, 20, 30, 40, 50]})# Группировка по столбцу 'Category'grouped = df.groupby('Category')# Агрегация данныхaggregated = grouped.agg({'Values': ['sum', 'mean', 'max', 'min']})print('Aggregated Data:\n', aggregated)# Применение пользовательской функцииdefcustom_func(group):return pd.Series({'Sum': group['Values'].sum(),'Range': group['Values'].max() - group['Values'].min() })result = grouped.apply(custom_func)print('\nCustom Function Result:\n', result)# Фильтрация группfiltered_groups = grouped.filter(lambdax: x['Values'].sum() >50)print('\nFiltered Groups:\n', filtered_groups)# Агрегация с несколькими столбцамиdf_multi = pd.DataFrame({'Category': ['A', 'B', 'A', 'B', 'A'],'Values1': [10, 20, 30, 40, 50],'Values2': [5, 10, 15, 20, 25]})grouped_multi = df_multi.groupby('Category')aggregated_multi = grouped_multi.agg({'Values1': 'sum','Values2': 'mean'})print('\nAggregated Data with Multiple Columns:\n', aggregated_multi)# Переиндексация после группировкиresult_reset = aggregated_multi.reset_index()print('\nData with Reset Index:\n', result_reset)
Заключение
Метод groupby в Pandas — это мощный инструмент для группировки данных и выполнения различных операций, таких как агрегация, фильтрация и применение функций. Использование groupby позволяет эффективно анализировать данные, группируя их по ключевым признакам и выполняя вычисления на основе этих групп.