Función Pandas Series.cumsum()

Pandas 常用函数Funciones comunes de Pandas


Series.cumsum()Es una función de Pandas que se utiliza para calcular la suma acumulada de una Series. La suma acumulada significa que, desde el primer elemento, el valor en cada posición es igual a la suma de todos los elementos anteriores a esa posición (incluido el elemento actual).

La suma acumulada se utiliza con frecuencia en escenarios como el análisis de datos financieros (por ejemplo, el cálculo de rendimientos acumulados), el análisis de ventas (por ejemplo, el cálculo de ventas acumuladas) y el análisis de series temporales.


Sintaxis básica y parámetros

cumsum()Es una función miembro del objeto Series y se invoca directamente mediante el operador de punto.

Formato de sintaxis

Series.cumsum(axis=None, skipna=True, dtype=None, out=None, **kwargs)

Descripción de parámetros

Parámetro Tipo Descripción Valor predeterminado
axis int Especifica el eje. Series solo tiene una columna; este parámetro existe principalmente para la compatibilidad con DataFrame. None
skipna bool Si es True, omite los valores NaN durante el cálculo; si es False, la acumulación se interrumpe al encontrar un NaN. True
dtype dtype Especifica el tipo de datos de salida. None
out ndarray El array utilizado para almacenar el resultado; normalmente no es necesario configurarlo. None

Valor de retorno

  • Tipo de retorno:Series
  • DescripciónDevuelve una nueva Series, donde el valor de cada posición es la suma acumulada.

Ejemplos

Vamos a dominar completamente, mediante una serie de ejemplos de simples a complejos, el usoSeries.cumsum()de la función.

Ejemplo 1: Uso básico - Calcular las ventas acumuladas

La suma acumulada es el total de todos los valores hasta la posición actual.

Ejemplo

import pandas as pd

# Crear una Series con las ventas diarias
daily_sales = pd.Series([1000, 1500, 1200, 1800, 2000, 900, 1600])

print("Ventas diarias (yuanes):")
print(daily_sales)
print()

# Calcular las ventas acumuladas
cumulative_sales = daily_sales.cumsum()

print("Ventas acumuladas (yuanes):")
print(cumulative_sales)
print()

print("Análisis:")
print("- Acumulado del día 1: 1000")
print("- Acumulado del día 2: 1000 + 1500 = 2500")
print("- Acumulado del día 3: 1000 + 1500 + 1200 = 3700")
print("Y así sucesivamente...")

Resultado de la ejecución:

每日销售额(元):
0    1000
1    1500
2    1200
3    1800
4    2000
5     900
6    1600
dtype: int64

累计销售额(元):
0    1000
1    2500
2    3700
3    5500
4    7500
5    8400
6   10000
dtype: int64

分析:
- 第1天的累计销售就是当天的销售额
- 第2天的累计销售额 = 第1天 + 第2天的销售额
- 以此类推...

Análisis del código:

  • Suma acumulada en la posición 1 = 1000
  • Suma acumulada en la posición 2 = 1000 + 1500 = 2500
  • Suma acumulada en la posición 3 = 1000 + 1500 + 1200 = 3700
  • Y así sucesivamente...

Ejemplo 2: Manejo de datos con valores faltantes

skipnaEl parámetro determina cómo se manejan los valores faltantes.

Ejemplo

import pandas as pd
import numpy as np

# Crear una Series con valores faltantes
data_with_nan = pd.Series([10, 20, np.nan, 30, 40])

print("Datos originales (con valores faltantes):")
print(data_with_nan)
print()

# Por defecto skipna=True, omite los NaN al calcular la suma acumulada
cumulative_skipna = data_with_nan.cumsum()
print("Suma acumulada con skipna=True (predeterminado):")
print(cumulative_skipna)
print()

# Establecer skipna=False, la posición con NaN interrumpe la acumulación
cumulative_no_skipna = data_with_nan.cumsum(skipna=False)
print("Suma acumulada con skipna=False:")
print(cumulative_no_skipna)

Resultado de la ejecución:

原始数据(含缺失值):
0    10.0
1    20.0
2       NaN
3    30.0
4    40.0
dtype: float64

skipna=True(默认)的累计和:
0    10.0
1    30.0
2       NaN
3    60.0
4   100.0
dtype: float64

skipna=False 的累计和:
0    10.0
1    30.0
2       NaN
3     NaN
4     DataFrame

Análisis del código:

  • Cuandoskipna=TrueCuando skipna=True, las posiciones con NaN se omiten y la acumulación posterior continúa basándose en los valores válidos.
  • Cálculo: 10 → 30 → (omitido) → 60 → 100
  • Cuandoskipna=FalseCuando skipna=False, todas las posiciones después de un NaN se convierten en NaN.

Ejemplo 3: Análisis combinado con los datos originales

En el análisis práctico, normalmente es necesario ver simultáneamente los datos originales y los datos acumulados.

Ejemplo

import pandas as pd

# Crear datos de precios de acciones
stock_prices = pd.Series([100, 102, 98, 105, 103, 108, 110])

# Calcular el cambio diario
daily_change = stock_prices.diff()

# Calcular el cambio acumulado
cumulative_change = stock_prices.cumsum() - stock_prices.iloc[0] * len(stock_prices) + stock_prices

# O, más simplemente, usar cumsum para calcular el cambio acumulado relativo al precio inicial
print("Datos de precios de acciones:")
print(stock_prices.values)
print()

# Calcular el cambio de precio del día (en comparación con el día anterior)
print("Cambio diario:")
print(daily_change.fillna(0).values)
print()

# Otra forma: calcular el rendimiento acumulado
cumulative_return = ((stock_prices / stock_prices.iloc[0]) - 1) * 100

print("Rendimiento acumulado (%):")
print(cumulative_return.values)
print()

# Valor acumulado a partir de 100 yuanes
initial_price = 100
cumulative_value = initial_price + stock_prices.cumsum() - stock_prices.iloc[0]

print("Valor acumulado (asumiendo 100 yuanes iniciales):")
print(cumulative_value.values)

Resultado de la ejecución:

股价数据:[100, 102, 98, 105, 103, 108, 110]

每日涨跌(与前一天相比):
[ 0.,  2., -4.,  7., -2.,  5.,  2.]

累计收益(%):
[0.0, 2.0, -2.0, 5.0, 3.0, 8.0, 10.0]

累计价值(假设初始 100 元):
0      100
1      202
2      300
3      405
4      508
5      616
6      726
dtype: int64

分析:第 7 天时,股价从 100 涨到 110,累计收益率为 10%。

Ejemplo 4: Aplicación práctica - Datos acumulados mensuales

Muestra una aplicación típica de cumsum en el análisis financiero.

Ejemplo

import pandas as pd

# Crear datos de ventas mensuales
monthly_sales = pd.Series({
    'Enero': 50000,
    'Febrero': 62000,
    'Marzo': 58000,
    'Abril': 70000,
    'Mayo': 75000,
    'Junio': 80000
})

print("Ventas mensuales (yuanes):")
print(monthly_sales)
print()

# Calcular las ventas acumuladas mensuales
cumulative_sales = monthly_sales.cumsum()

# Crear una tabla resumen
summary = pd.DataFrame({
    'Ventas mensuales': monthly_sales,
    'Ventas acumuladas': cumulative_sales,
    'Proporción de cumplimiento del objetivo anual': (cumulative_sales / 500000 * 100).round(1)
})

print("Tabla resumen de ventas:")
print(summary)
print()

print(f"Ventas acumuladas del primer semestre: {cumulative_sales.iloc[-1]} yuanes")
print(f"Tasa de cumplimiento del objetivo anual: {cumulative_sales.iloc[-1]/500000*100:.1f}%")

Resultado de la ejecución:

月度销售额(元):
1月    50000
2月    62000
累计    112000
4月    70000
5月    75000
6月    80000
dtype: int64

销售汇总表:
              月度销售额   累计销售额  完成年度目标(%)
1月    50000    50000          10.0
2月    62000   112000          22.4
3月    58000   170000          34.0
4月    70000   240000          累计  34.0%
5月    75000   315000          63.0
6月   累计  395000          79.0
dtype: int64

分析:6 月底累计销售额为 39.5 万元,已完成年度目标的 79.0%。

Ejemplo 5: Aplicación en DataFrame

cumsum también se puede utilizar en DataFrame por columnas o por filas.

Ejemplo

import pandas as pd

# Crear un DataFrame con las ventas de varios productos
sales_data = pd.DataFrame({
    'Producto A': [100, 150, 120, 180],
    'Producto B': [80, 90, 110, 130],
    'Producto C': [50, 60, 70, 80]
}, index=['Enero', 'Febrero', 'Marzo', 'Abril'])

print("Datos de ventas mensuales:")
print(sales_data)
print()

# Calcular las ventas acumuladas por columna (predeterminado)
cumulative_by_col = sales_data.cumsum()
print("Ventas acumuladas por producto:")
print(cumulative_by_col)
print()

# Calcular las ventas acumuladas por fila
cumulative_by_row = sales_data.cumsum(axis=1)
print("Ventas acumuladas por mes:")
print(cumulative_by_row)

Resultado de la ejecución:

月度销售数据:
    产品A  产品B  产品C
1月  100    80    50
2月  150    90    60
3月 120
4月  180   130    80

按产品累计销量:
    产品A  产品B  产品C
1月  100    80    50
2月  250   170   110
3月 370   280   180
4月 550   410   260

按月度累计销量:
     产品A   产品B   产品C
1月  100.0  180.0  230.0
2月  250.0  340.0  400.0

Análisis del código:

  • Por defectoaxis=0, se calcula la suma acumulada en la dirección de las columnas.
  • Al configuraraxis=1, se calcula la suma acumulada en la dirección de las filas.

Notas importantes

  • cumsum devuelve una nueva Series y no modifica los datos originales.
  • Por defecto skipna=True, los valores NaN se omiten.
  • Cuando skipna=False, encontrar un NaN hace que todos los valores posteriores se conviertan en NaN.
  • En DataFrame, se puede usar el parámetro axis para controlar la dirección de la acumulación.
  • El cálculo de la suma acumulada depende del orden y no se puede paralelizar.

Resumen

Series.cumsum()Es una función básica en el análisis de series temporales. Sus principales características incluyen:

  • Calcula el valor acumulado desde el inicio hasta la posición actual.
  • Admite el manejo de valores faltantes, que se puede controlar mediante el parámetro skipna.
  • Admite el cálculo por filas o por columnas en DataFrame.
  • Se aplica ampliamente en escenarios como análisis financiero, estadísticas de ventas y seguimiento de progreso.

La suma acumulada nos ayuda a comprender la tendencia de cambio de los datos a lo largo del tiempo y es una herramienta importante en el análisis de datos. Utilizada junto con otras funciones acumulativas (como cumprod, cummax, cummin), se puede obtener una visión más completa de los datos.

Pandas 常用函数Funciones comunes de Pandas

Otras extensiones