Агрегация данных в Pandas

Сбор статистической информации по датасету в Pandas

Агрегация данных - это ключевой процесс в анализе данных, который позволяет суммировать, усреднять, находить минимум, максимум и другие статистические характеристики в наборах данных. Рассмотрим метод agg() и методы комбинирования функций, которые позволяют эффективно агрегировать данные в Python, особенно в контексте библиотеки Pandas.

Использование метода agg() в Pandas

Библиотека Pandas предоставляет множество инструментов для агрегации данных. Один из таких инструментов - метод agg(). Этот метод позволяет применять одну или несколько агрегирующих функций к одному или нескольким столбцам данных.

Давайте рассмотрим его использование на примере. Предположим, у нас есть DataFrame с данными о продажах товаров:

import pandas as pd

data = {
    'Product': ['A', 'B', 'A', 'B', 'A'],
    'Revenue': [100, 150, 200, 250, 300],
    'Quantity': [10, 15, 20, 25, 30]
}

df = pd.DataFrame(data)

Мы можем использовать метод agg() для агрегации данных следующим образом:

agg_result = df.groupby('Product').agg({'Revenue': 'sum', 'Quantity': 'mean'})

print(agg_result)

#          Revenue  Quantity
# Product
# A            600      20.0
# B            400      20.0

В этом примере мы сгруппировали данные по столбцу Product и затем применили агрегирующие функции. Для столбца Revenue мы использовали функцию sum, чтобы найти общую выручку по каждому продукту, а для столбца Quantity - функцию mean, чтобы найти среднее количество продуктов.

Комбинирование функций

Однако иногда требуется применить несколько функций к одним и тем же данным. В Pandas это можно сделать, комбинируя функции с помощью метода agg().

agg_result = df.groupby('Product').agg({'Revenue': ['sum', 'mean'], 'Quantity': ['sum', 'max']})

print(agg_result)

#         Revenue        Quantity    
#             sum   mean      sum max
# Product                            
# A           600  200.0       60  30
# B           400  200.0       40  25

В этом примере мы применили несколько функций к столбцам Revenue и Quantity. Для Revenue мы нашли сумму и среднее значение, а для Quantity - сумму и максимальное значение.

Теперь у нас есть более обширный отчет, который включает несколько статистических характеристик для каждого продукта.

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

Иногда вам может потребоваться применить собственную функцию к данным для агрегации. В Pandas это также можно сделать с помощью метода agg(). Давайте представим, что у нас есть нестандартное требование - нам нужно найти разницу между минимальным и максимальным значением столбца Revenue для каждого продукта.

Мы можем определить пользовательскую функцию и применить ее с использованием agg():

def revenue_range(series):
    return series.max() - series.min()

agg_result = df.groupby('Product').agg({'Revenue': revenue_range})

print(agg_result)

#          Revenue
# Product         
# A            200
# B            100

Теперь у нас есть разница между минимальным и максимальным значением столбца Revenue для каждого продукта.

Примеры комбинирования функций

Давайте рассмотрим еще несколько примеров комбинирования функций с использованием метода agg().

Пример 1: Нахождение среднего значения и медианы

agg_result = df.groupby('Product').agg({'Revenue': ['mean', 'median']})

print(agg_result)

#         Revenue       
#            mean median
# Product               
# A         200.0  200.0
# B         200.0  200.0

В этом примере мы находим среднее значение и медиану выручки для каждого продукта.

Пример 2: Нахождение суммы и стандартного отклонения

agg_result = df.groupby('Product').agg({'Revenue': ['sum', 'std']})

print(agg_result)

#         Revenue            
#             sum         std
# Product                    
# A           600  100.000000
# B           400   70.710678

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

Пример 3: Применение разных функций к разным столбцам

agg_result = df.groupby('Product').agg({'Revenue': 'sum', 'Quantity': 'max'})

print(agg_result)

#          Revenue  Quantity
# Product                   
# A            600        30
# B            400        25

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

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

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

agg_result = df.groupby(['Region', 'Category']).agg({'Revenue': 'sum'})

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

Использование агрегирующих функций с условиями

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

agg_result = df[df['Quantity'] > 10].groupby('Product').agg({'Revenue': 'sum'})

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

Использование apply() для агрегации данных

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

def calculate_percentage(series):
    return (series / series.sum()) * 100

agg_result = df.groupby('Product')['Revenue'].apply(calculate_percentage)

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

Комбинирование функций с agg() и apply()

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

agg_result = df.groupby('Product').agg({'Revenue': 'sum', 'Customer_ID': 'nunique'})

Здесь мы используем agg() для нахождения суммы выручки и метод nunique (который находит количество уникальных элементов) с помощью apply() для нахождения количества уникальных клиентов.

Заключение

Агрегация данных - важная часть анализа данных, и метод agg() в библиотеке Pandas делает этот процесс более гибким и мощным. Комбинирование функций позволяет получать разнообразные статистические характеристики и анализировать данные с учетом различных условий. Это помогает аналитикам и исследователям данных извлекать ценную информацию из больших объемов данных и принимать обоснованные решения.

Содержание: