Función Pandas groupby.sum()

Funciones comunes de Pandas


groupby.sum()Es una función de agregación en Pandas que se utiliza para sumar después de agrupar. Normalmente se combina congroupby()la función, primero agrupa los datos por los valores de una columna y luego calcula la suma de las columnas numéricas en cada grupo.

En el análisis de datos real,sum()es una de las funciones de agregación más utilizadas. Por ejemplo, calcular el salario total de cada departamento, las ventas totales de cada región, la cantidad total de cada categoría, etc.


Sintaxis básica y parámetros

sum()Es una función miembro del objeto GroupBy, debe usarse primerogroupby()llamar después de agrupar.

Formato de sintaxis

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

Descripción de parámetros

Parámetro Tipo Descripción Valor predeterminado
numeric_only bool Si es True, solo suma las columnas numéricas; si es False, intenta sumar todas las columnas. False
min_count int El número mínimo de valores válidos necesarios para realizar la suma. Si el grupo tiene menos valores válidos que esta cantidad, devuelve NaN. -1
engine str Especifica el motor de cálculo, puede ser 'cython' o 'numba'. None indica que Pandas lo selecciona automáticamente. None
engine_kwargs dict Diccionario de parámetros adicionales pasados al motor subyacente. None

Valor de retorno

  • Tipo de retorno:SeriesoDataFrame
  • Descripción: Devuelve el resultado de la suma agrupada. Si se usa en una sola columna, devuelve una Serie; si se usa en varias columnas, devuelve un DataFrame.

Ejemplos

Aprendamos a dominar completamentegroupby.sum()su uso mediante una serie de ejemplos de simples a complejos.

Ejemplo 1: Uso básico - Agrupar por una sola columna y sumar

El uso más básico es agrupar por los valores de una columna y luego sumar otra columna.

Ejemplo

import pandas as pd

# Crear un DataFrame de datos de ventas
# Simular una tabla que contiene región, producto, ventas
data = {
    'Región': ['Norte de China', 'Este de China', 'Sur de China', 'Norte de China', 'Este de China', 'Sur de China', 'Norte de China', 'Este de China'],
    'Producto': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B'],
    'Ventas': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100],
    'Cantidad': [10, 20, 15, 18, 22, 16, 12, 21]
}

# Crear DataFrame
df = pd.DataFrame(data)

print(Datos de ventas originales:)
print(df)
print()

# Agrupar por 'región', calcular las ventas totales de cada región
sales_by_region = df.groupby('Región')['Ventas'].sum()

print(Ventas totales de cada región:)
print(sales_by_region)
print()

# Agrupar por 'producto', calcular la cantidad total vendida de cada producto
quantity_by_product = df.groupby('Producto')['Cantidad'].sum()

print(Cantidad total vendida de cada producto:)
print(quantity_by_product)

Resultado de ejecución:

原始销售数据:
  地区  产品   销售额   数量
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

Análisis del código:

  1. df.groupby('地区')['销售额']Indica que primero se agrupa por la columna 'Región' y luego se selecciona la columna 'Monto de ventas' para la operación.
  2. .sum()Suma las ventas en cada grupo.
  3. El resultado devuelto es una Serie, cuyo índice son los valores de la columna de agrupación (es decir, los nombres de cada región).

Ejemplo 2: Agrupar por múltiples columnas y sumar

Se puede agrupar por varias columnas a la vez y luego sumar las columnas numéricas.

Ejemplo

import pandas as pd

# Crear datos de ventas
data = {
    'Región': ['Norte de China', 'Este de China', 'Sur de China', 'Norte de China', 'Este de China', 'Sur de China', 'Norte de China', 'Este de China'],
    'Producto': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B'],
    'Ventas': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100],
    'Cantidad': [10, 20, 15, 18, 22, 16, 12, 21]
}
df = pd.DataFrame(data)

print(Datos de ventas originales:)
print(df)
print()

# Agrupar por las columnas 'región' y 'producto', calcular el total de ventas y la cantidad total
# as_index=False indica que las columnas de agrupación se conservan como columnas normales en el resultado
grouped = df.groupby(['Región', 'Producto'], as_index=False).sum()

print(Total después de agrupar por región y producto:)
print(grouped)
print()

# También se puede sumar todas las columnas numéricas sin especificar columnas
grouped_all = df.groupby(['Región', 'Producto']).sum()
print(Suma de todas las columnas numéricas (devuelve un DataFrame):)
print(grouped_all)

Resultado de ejecución:

原始销售数据:
  地区  产品   销售额   数量
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

Análisis del código:

  • ['Región', 'Producto']Usar una lista permite agrupar por varias columnas a la vez.
  • as_index=Falseel resultado está en formato DataFrame, y las columnas de agrupación se conservan como columnas normales.
  • Cuando no se especifican columnas (por ejemplo,.sum()), se suman todas las columnas numéricas.

Ejemplo 3: Uso del parámetro min_count

min_countEl parámetro puede controlar el número mínimo de valores válidos necesarios para la suma agrupada. Cuando el grupo tiene menos valores válidos que esa cantidad, devuelve NaN.

Ejemplo

import pandas as pd
import numpy as np

# Crear datos con valores faltantes
data = {
    'Departamento': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
    'Salario': [5000, 6000, np.nan, 7000, np.nan, np.nan, 8000, 9000, 10000]
}
df = pd.DataFrame(data)

print(Datos de salarios de empleados (con valores faltantes):)
print(df)
print()

# De forma predeterminada, sum() ignora los valores NaN al sumar
sum_default = df.groupby('Departamento')['Salario'].sum()
print(Suma predeterminada (ignorando NaN):)
print(sum_default)
print()

# Establecer min_count=3, requiere al menos 3 valores válidos para sumar
sum_min_count = df.groupby('Departamento')['Salario'].sum(min_count=3)
print(Resultado de la suma con min_count=3:)
print(sum_min_count)
print()

# Establecer min_count=2
sum_min_count2 = df.groupby('Departamento')['Salario'].sum(min_count=2)
print(Resultado de la suma con min_count=2:)
print(sum_min_count2)

Resultado de ejecución:

员工工资数据(包含缺失值):
  部门     工资
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

Análisis del código:

  • De forma predeterminada,sum()se ignoran los valores NaN y solo se suman los valores válidos.
  • min_count=3Indica que cada grupo debe tener al menos 3 valores válidos para calcular la suma; de lo contrario, devuelve NaN.
  • El departamento A tiene 2 valores válidos (5000 y 6000), no cumple min_count=3, por lo que devuelve NaN; el departamento C tiene 3 valores válidos, por lo que puede sumar normalmente.

Notas:sum()De forma predeterminada, se ignoran los valores NaN al sumar, lo cual es consistente con el tratamiento de 'valores nulos' que entendemos habitualmente. Si necesita tratar NaN como 0 y luego sumar, primero puede usarfillna(0)el método para rellenar los valores faltantes.


Funciones comunes de Pandas

Otras extensiones