Fonction Series.cumsum() de Pandas

Pandas 常用函数Fonctions courantes de Pandas


Series.cumsum()est une fonction Pandas utilisée pour calculer la somme cumulée d'une Series. La somme cumulée signifie qu'à partir du premier élément, la valeur à chaque position est égale à la somme de tous les éléments avant cette position (y compris l'élément courant).

Les sommes cumulées sont souvent utilisées dans l'analyse de données financières (comme le calcul des rendements cumulés), l'analyse des ventes (comme le calcul des ventes cumulées), l'analyse de séries temporelles et d'autres scénarios.


Syntaxe de base et paramètres

cumsum()est une fonction membre de l'objet Series, appelée directement via l'opérateur point.

Syntaxe

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

Description du paramètre

Paramètre Type Description Valeur par défaut
axis int Spécifie l'axe ; une Series n'a qu'une seule colonne, donc ce paramètre sert principalement à la compatibilité avec DataFrame. Aucune
skipna bool Si True, les valeurs NaN sont ignorées lors du calcul ; si False, rencontrer NaN interrompt la somme cumulée. True
dtype dtype Spécifie le type de données de sortie. Aucune
out ndarray Le tableau utilisé pour stocker le résultat ; il n'est généralement pas nécessaire de le définir. Aucune

Valeur de retour

  • Type de retour:Series
  • Description: Renvoie une nouvelle Series, où la valeur de chaque position est la somme cumulée.

Exemples

À travers une série d'exemples du simple au complexe, maîtrisons à fondSeries.cumsum()l'utilisation.

Exemple 1 : Utilisation de base - Calcul des ventes cumulées

La somme cumulée est le total de toutes les valeurs jusqu'à la position actuelle.

Exemple

import pandas as pd

# Créer une Series contenant les ventes quotidiennes
daily_sales = pd.Series([1000, 1500, 1200, 1800, 2000, 900, 1600])

print("Ventes quotidiennes (yuan) :")
print(daily_sales)
print()

# Calculer les ventes cumulées
cumulative_sales = daily_sales.cumsum()

print("Ventes cumulées (yuan) :")
print(cumulative_sales)
print()

print("Analyse :")
print("- Cumul du jour 1 : 1000")
print("- Cumul du jour 2 : 1000 + 1500 = 2500")
print("- Cumul du jour 3 : 1000 + 1500 + 1200 = 3700")
print("Et ainsi de suite...")

Sortie :

每日销售额(元):
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天的销售额
- 以此类推...

Explication du code :

  • Somme cumulée à la position 1 = 1000
  • Somme cumulée à la position 2 = 1000 + 1500 = 2500
  • Somme cumulée à la position 3 = 1000 + 1500 + 1200 = 3700
  • Et ainsi de suite...

Exemple 2 : Gestion des données avec des valeurs manquantes

skipnaLe paramètre détermine comment les valeurs manquantes sont traitées.

Exemple

import pandas as pd
import numpy as np

# Créer une Series contenant des valeurs manquantes
data_with_nan = pd.Series([10, 20, np.nan, 30, 40])

print("Données originales (avec valeurs manquantes) :")
print(data_with_nan)
print()

# Par défaut skipna=True, ignorer NaN lors du calcul de la somme cumulée
cumulative_skipna = data_with_nan.cumsum()
print("Somme cumulée avec skipna=True (par défaut) :")
print(cumulative_skipna)
print()

# Définir skipna=False, les positions NaN interrompront la somme cumulée
cumulative_no_skipna = data_with_nan.cumsum(skipna=False)
print("Somme cumulée avec skipna=False :")
print(cumulative_no_skipna)

Sortie :

原始数据(含缺失值):
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

Explication du code :

  • Quandskipna=TrueLorsque défini sur True, les positions NaN sont ignorées, et les sommes cumulées suivantes continuent en fonction des valeurs valides.
  • Calcul : 10 → 30 → (ignoré) → 60 → 100
  • Quandskipna=FalseLorsque défini sur False, toutes les positions après la rencontre d'un NaN deviennent NaN.

Exemple 3 : Analyse conjointe avec les données d'origine

Dans l'analyse pratique, il est souvent nécessaire de visualiser en même temps les données d'origine et les données cumulées.

Exemple

import pandas as pd

# Créer des données de prix des actions
stock_prices = pd.Series([100, 102, 98, 105, 103, 108, 110])

# Calculer les variations quotidiennes
daily_change = stock_prices.diff()

# Calculer les variations cumulées
cumulative_change = stock_prices.cumsum() - stock_prices.iloc[0] * len(stock_prices) + stock_prices

# Ou plus simplement, utiliser cumsum pour calculer la variation cumulée par rapport au prix initial
print("Données de prix des actions :")
print(stock_prices.values)
print()

# Calculer la variation du prix pour la journée (par rapport au jour précédent)
print("Variations quotidiennes :")
print(daily_change.fillna(0).values)
print()

# Une autre façon : calculer les rendements cumulés
cumulative_return = ((stock_prices / stock_prices.iloc[0]) - 1) * 100

print("Rendements cumulés (%) :")
print(cumulative_return.values)
print()

# Valeur cumulée à partir de 100 yuans
initial_price = 100
cumulative_value = initial_price + stock_prices.cumsum() - stock_prices.iloc[0]

print("Valeur cumulée (en supposant 100 yuans initiaux) :")
print(cumulative_value.values)

Sortie :

股价数据:[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%。

Exemple 4 : Application pratique - Données cumulées mensuelles

Démontre l'application typique de cumsum dans l'analyse financière.

Exemple

import pandas as pd

# Créer des données de ventes mensuelles
monthly_sales = pd.Series({
    'janvier': 50000,
    'février': 62000,
    'mars': 58000,
    'avril': 70000,
    'Mai': 75000,
    'Juin': 80000
})

print("Ventes mensuelles (yuan) :")
print(monthly_sales)
print()

# Calculer les ventes cumulées mensuelles
cumulative_sales = monthly_sales.cumsum()

# Créer un tableau récapitulatif
summary = pd.DataFrame({
    'Ventes mensuelles': monthly_sales,
    'Ventes cumulées': cumulative_sales,
    'Taux de réalisation de l’objectif annuel': (cumulative_sales / 500000 * 100).round(1)
})

print("Tableau récapitulatif des ventes :")
print(summary)
print()

print(f"Ventes cumulées du premier semestre : {cumulative_sales.iloc[-1]} yuan")
print(f"Taux de réalisation de l'objectif annuel : {cumulative_sales.iloc[-1]/500000*100:.1f}%")

Sortie :

月度销售额(元):
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%。

Exemple 5 : Application dans un DataFrame

cumsum peut également être utilisé dans un DataFrame en colonnes ou en lignes.

Exemple

import pandas as pd

# Créer un DataFrame contenant les ventes de plusieurs produits
sales_data = pd.DataFrame({
    'Produit A': [100, 150, 120, 180],
    'Produit B': [80, 90, 110, 130],
    'Produit C': [50, 60, 70, 80]
}, index=['Janvier', 'Février', 'Mars', 'avril'])

print("Données de ventes mensuelles :")
print(sales_data)
print()

# Calculer les ventes cumulées par colonne (par défaut)
cumulative_by_col = sales_data.cumsum()
print("Ventes cumulées par produit :")
print(cumulative_by_col)
print()

# Calculer les ventes cumulées par ligne
cumulative_by_row = sales_data.cumsum(axis=1)
print("Ventes cumulées par mois :")
print(cumulative_by_row)

Sortie :

月度销售数据:
    产品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

Explication du code :

  • Par défaut,axis=0la somme cumulée est calculée dans le sens des colonnes.
  • Paramètreaxis=1calcule la somme cumulée dans le sens des lignes.

Notes

  • cumsum renvoie une nouvelle Series et ne modifie pas les données d'origine.
  • Par défaut, skipna=True, et les valeurs NaN sont ignorées.
  • Lorsque skipna=False, rencontrer NaN fait que toutes les valeurs suivantes deviennent NaN.
  • Dans un DataFrame, le paramètre axis peut être utilisé pour contrôler la direction cumulative.
  • Le calcul de la somme cumulée dépend de l’ordre et ne peut pas être parallélisé.

Résumé

Series.cumsum()est une fonction fondamentale dans l'analyse des séries temporelles. Ses principales caractéristiques incluent :

  • Calcule la valeur cumulée depuis le début jusqu'à la position actuelle.
  • Prend en charge le traitement des valeurs manquantes, contrôlé via le paramètre skipna.
  • Prend en charge le calcul par ligne ou par colonne dans un DataFrame.
  • Largement utilisé dans l'analyse financière, les statistiques de ventes, le suivi de progression et d'autres scénarios.

La somme cumulée nous aide à comprendre la tendance des données au fil du temps et est un outil important en analyse de données. Utilisée conjointement avec d'autres fonctions cumulatives (telles que cumprod, cummax, cummin), elle peut fournir des aperçus de données plus complets.

Pandas 常用函数Fonctions courantes de Pandas

Autres extensions