Fonction Series.cumsum() 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
# 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 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 :
- Quand
skipna=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
- Quand
skipna=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
# 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
# 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
# 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ètre
axis=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.
Autres extensions
Fonctions courantes de Pandas