Группировка данных и агрегация с использованием метода groupby

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

Основные операции с groupby

Основы использования groupby

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

import pandas as pd

# Создание DataFrame
df = 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

# Создание DataFrame
data = {
    'Категория': ['A', 'B', 'A', 'C', 'B', 'A', 'C'],
    'Значение': [10, 15, 10, 20, 15, 30, 25]
}

df = pd.DataFrame(data)

# Группировка по столбцу 'Категория' и применение суммирования
result = df.groupby('Категория')['Значение'].sum()

print(result)

Описание:

  1. df.groupby('Категория'): Группировка данных по столбцу 'Категория'.

  2. ['Значение'].sum(): Применение суммы к столбцу 'Значение' в каждой группе.

Результат:

Категория
A    50
B    30
C    45
Name: Значение, dtype: int64

Этот код создаёт DataFrame, группирует его по столбцу 'Категория' и вычисляет сумму значений в столбце 'Значение' для каждой категории.

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

# Агрегация данных
aggregated = grouped.agg({
    'Values': ['sum', 'mean', 'max', 'min']
})
print(aggregated)

Применение пользовательских функций

Вы можете применять свои функции к каждой группе с помощью метода apply().

# Определение пользовательской функции
def custom_func(group):
    return pd.Series({
        'Sum': group['Values'].sum(),
        'Range': group['Values'].max() - group['Values'].min()
    })

# Применение пользовательской функции
result = grouped.apply(custom_func)
print(result)

Фильтрация групп

Метод filter() позволяет фильтровать группы по условию.

# Фильтрация групп, где сумма значений больше 50
filtered_groups = grouped.filter(lambda x: 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

# Создание DataFrame
df = 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)

# Применение пользовательской функции
def custom_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(lambda x: 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 позволяет эффективно анализировать данные, группируя их по ключевым признакам и выполняя вычисления на основе этих групп.

Last updated