Data Analysis

Полное руководство по группировке и агрегации данных в Pandas

Spread the love

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

Оглавление:

Простое суммирование с groupby()

Простейший способ вычислить сумму столбца после группировки — использовать groupby() непосредственно с методом sum():


import pandas as pd

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

# Группировка по 'Group' и суммирование 'Value'
grouped_sum = df.groupby('Group')['Value'].sum()
print(grouped_sum)

Это кратко создает Series с суммой ‘Value’ для каждой группы.

Множественные агрегации с agg()

Метод agg() позволяет эффективно вычислять несколько агрегатных статистик одновременно. Это особенно полезно, когда вам нужно больше, чем просто сумма:


import pandas as pd

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

# Вычисление суммы, среднего и количества для каждой группы
aggregated = df.groupby('Group')['Value'].agg(['sum', 'mean', 'count'])
print(aggregated)

Эта единственная строка кода вычисляет сумму, среднее и количество ‘Value’ для каждой группы, в результате чего получается DataFrame.

Пользовательская агрегация с apply()

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


import pandas as pd
import numpy as np

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

def custom_agg(x):
    return pd.Series({'sum': x.sum(), 'range': x.max() - x.min()})

# Применение пользовательской функции агрегации
result = df.groupby('Group')['Value'].apply(custom_agg).reset_index()
print(result)

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

Накопленные суммы с groupby() и cumsum()

Чтобы получить накопленные суммы в каждой группе, объедините groupby() с методом cumsum():


import pandas as pd

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

# Вычисление накопленной суммы для каждой группы
df['Cumulative Sum'] = df.groupby('Group')['Value'].cumsum()
print(df)

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

Преобразование данных с pivot_table()

Для более наглядного и удобного для анализа представления агрегированных данных, особенно при работе с несколькими группирующими переменными, используйте pivot_table():


import pandas as pd

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Category': ['X', 'Y', 'X', 'Y', 'Z', 'X'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

pivot_table = pd.pivot_table(df, values='Value', index='Group', columns='Category', aggfunc='sum', fill_value=0)
print(pivot_table)

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *