Функция Pandas groupby.sum()

Pandas: общие функции


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

В реальном анализе данных,sum()— это одна из наиболее часто используемых агрегационных функций. Например, расчёт общей заработной платы по каждому отделу, общих продаж по каждому региону, общего количества по каждой категории и т. д.


Базовый синтаксис и параметры

sum()— это метод объекта GroupBy. Сначала нужно использоватьgroupby(), чтобы сгруппировать данные, а затем вызвать его.

Формат синтаксиса

GroupBy.sum(numeric_only=False, min_count=-1, engine=None, engine_kwargs=None)

Описание параметра

Параметр Type Описание Значение по умолчанию
numeric_only bool Если True, суммируются только числовые столбцы; если False, предпринимается попытка суммировать все столбцы. False
min_count int Минимальное количество допустимых значений, необходимое для суммирования. Если в группе допустимых значений меньше этого числа, возвращается NaN. -1
engine str Указывает вычислительный движок, который может быть 'cython' или 'numba'. None означает, что Pandas выбирает его автоматически. Отсутствует
engine_kwargs dict Словарь дополнительных параметров, передаваемых в базовый движок. Отсутствует

Возвращаемое значение

  • Тип возвращаемого значения:SeriesилиDataFrame
  • Описание: Возвращает результат после группировки и суммирования. Если применяется к одному столбцу, возвращает Series; если применяется к нескольким столбцам, возвращает DataFrame.

Примеры

Через серию примеров от простых к сложным давайте тщательно освоимgroupby.sum()использование.

Пример 1: Базовое использование — группировка по одному столбцу и суммирование

Самый простой вариант использования — сгруппировать по значениям в одном столбце, а затем просуммировать другой столбец.

Пример

import pandas as pd

# Создать DataFrame с данными о продажах
# Смоделировать таблицу, содержащую регион, товар и продажи
data = {
    'Region': ['North China', 'East China', 'South China', 'North China', 'East China', 'South China', 'North China', 'East China'],
    'product': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B'],
    'Sales amount': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100],
    'Количество': [10, 20, 15, 18, 22, 16, 12, 21]
}

# Создать DataFrame
df = pd.DataFrame(data)

print("Исходные данные о продажах:")
print(df)
print()

# Сгруппировать по "Region" и вычислить общий объем продаж для каждого региона
sales_by_region = df.groupby('Region')['Sales amount'].sum()

print(Общий объем продаж по регионам:)
print(sales_by_region)
print()

# Сгруппировать по "Product" и вычислить общее количество продаж для каждого товара
quantity_by_product = df.groupby('product')['Quantity'].sum()

print(Общее количество продаж для каждого товара:)
print(quantity_by_product)

Вывод:

原始销售数据:
  地区  产品   销售额   数量
0  华北   A   1000    10
1  华东   B   2000    20
2  华南   C   1500    15
3  华北   B   1800    18
4  华东   A   2200    22
5  华南   C   1600    16
6  华北   A   1200    12
7  华东   B   2100    21

每个地区的总销售额:
地区
华东    7100
华南    3100
华北    4000
dtype: int64

每个产品的总销售数量:
产品
A    44
B    59
C    31
dtype: int64

Пояснение кода:

  1. df.groupby('地区')['销售额']Указывает, что данные сначала группируются по столбцу 'Region', а затем для операции выбирается столбец 'Sales amount'.
  2. .sum()Суммирует продажи в каждой группе.
  3. Возвращаемый результат — это Series, а индекс — значения столбца группировки (т. е. названия регионов).

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

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

Пример

import pandas as pd

# Создать данные о продажах
data = {
    'Region': ['North China', 'East China', 'South China', 'North China', 'East China', 'South China', 'North China', 'East China'],
    'product': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B'],
    'Sales amount': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100],
    'Количество': [10, 20, 15, 18, 22, 16, 12, 21]
}
df = pd.DataFrame(data)

print("Исходные данные о продажах:")
print(df)
print()

# Группировка по столбцам 'Region' и 'Product', вычисление общей суммы продаж и общего количества
# as_index=False означает, что столбец группировки сохраняется как обычный столбец в результате.
grouped = df.groupby(['Region', 'product'], as_index=False).sum()

print("Итог после группировки по региону и продукту:")
print(grouped)
print()

# В качестве альтернативы можно суммировать все числовые столбцы, не указывая конкретные столбцы
grouped_all = df.groupby(['Region', 'product']).sum()
print("Сумма всех числовых столбцов (возвращает DataFrame):")
print(grouped_all)

Вывод:

原始销售数据:
  地区  产品   销售额   数量
0  华北   A   1000    10
1  华东   B   2000    20
2  华南   C   1500    15
3  华北   B   1800    18
4  华东   A   2200    22
5  华南   C   1600    16
6  华北   A   1200    12
7  华东   B   2100    21

按地区和产品分组后的总计:
   地区  产品   销售额   数量
0  华东   A   2200    22
1  华东   B   4100    41
2  华南   C   3100    31
3  华北   A   2200    22
4  华北   B   1800    18

对所有数值列求和(返回DataFrame):
              销售额  数量
地区 产品
华东 A    2200   22
     B    4100   41
华南 C    3100   31
华北 A    2200   22
     B    1800   18

Пояснение кода:

  • ['Region', 'Product']Использование списка позволяет группировать по нескольким столбцам одновременно.
  • as_index=FalseВ этом случае результат имеет формат DataFrame, а столбцы группировки сохраняются как обычные столбцы.
  • Когда столбец не указан (например,.sum()), вычисляется сумма всех числовых столбцов.

Пример 3: Использование параметра min_count

min_countЭтот параметр управляет минимальным количеством допустимых значений, необходимых для суммирования в группе. Когда количество допустимых значений в группе меньше этого числа, возвращается NaN.

Пример

import pandas as pd
import numpy as np

# Создать данные с пропущенными значениями
data = {
    'Department': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
    'salary': [5000, 6000, np.nan, 7000, np.nan, np.nan, 8000, 9000, 10000]
}
df = pd.DataFrame(data)

print(Данные о зарплате сотрудников (включая пропущенные значения):)
print(df)
print()

# По умолчанию sum() игнорирует значения NaN при суммировании
sum_default = df.groupby('Department')['salary'].sum()
print(Сумма по умолчанию (игнорируя NaN):)
print(sum_default)
print()

# Установите min_count=3, чтобы для выполнения суммирования требовалось как минимум 3 допустимых значения
sum_min_count = df.groupby('Department')['salary'].sum(min_count=3)
print(Результат суммирования при min_count=3:)
print(sum_min_count)
print()

# Установите min_count=2
sum_min_count2 = df.groupby('Department')['salary'].sum(min_count=2)
print(Результат суммирования при min_count=2:)
print(sum_min_count2)

Вывод:

员工工资数据(包含缺失值):
  部门     工资
0  A  5000.0
1  A  6000.0
2  A     NaN
3  B  7000.0
4  B     NaN
5  B     NaN
6  C  8000.0
7  C  9000.0
8  C  10000.0

默认求和(忽略NaN):
部门
A    11000.0
B     7000.0
C    27000.0
dtype: float64

min_count=3 时的求和结果:
部门
A    11000.0
B         NaN
C    27000.0
dtype: float64

min_count=2 时的求和结果:
部门
A    11000.0
B     7000.0
C    27000.0
dtype: float64

Пояснение кода:

  • По умолчанию,sum()Он игнорирует значения NaN и суммирует только допустимые значения.
  • min_count=3Это означает, что в каждой группе должно быть как минимум 3 допустимых значения до вычисления суммы; в противном случае возвращается NaN.
  • В отделе A есть 2 допустимых значения (5000 и 6000), что не соответствует min_count=3, поэтому возвращается NaN; в отделе C есть 3 допустимых значения, поэтому его можно суммировать обычным образом.

Примечания:sum()По умолчанию значения NaN игнорируются при суммировании, что соответствует нашему повседневному пониманию обработки "null". Если перед суммированием нужно рассматривать NaN как 0, можно сначала использоватьfillna(0)метод для заполнения пропущенных значений.


Pandas: общие функции

Другие расширения