Función Pandas groupby.sum()
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
# 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:
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..sum()Suma las ventas en cada grupo.- 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
# 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 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.
Otras extensiones