Pandas Series.cumsum()-Funktion
Series.cumsum()ist eine Pandas-Funktion, mit der die kumulative Summe einer Series berechnet wird. Die kumulative Summe bedeutet, dass ausgehend vom ersten Element der Wert an jeder Position der Summe aller Elemente vor dieser Position (einschließlich des aktuellen Elements) entspricht.
Kumulative Summen werden häufig in der Finanzdatenanalyse (z. B. zur Berechnung kumulativer Renditen), Verkaufsanalyse (z. B. zur Berechnung kumulativer Verkäufe), Zeitreihenanalyse und anderen Szenarien verwendet.
Grundlegende Syntax und Parameter
cumsum()ist eine Member-Funktion des Series-Objekts, die direkt über den Punktoperator aufgerufen wird.
Syntax
Series.cumsum(axis=None, skipna=True, dtype=None, out=None, **kwargs)
Parameterbeschreibung
| Parameter | Type | Beschreibung | Standardwert |
|---|---|---|---|
| axis | int | Gibt die Achse an; eine Series hat nur eine Spalte, daher dient dieser Parameter hauptsächlich der Kompatibilität mit DataFrame. | Keine |
| skipna | bool | Wenn True, werden NaN-Werte bei der Berechnung übersprungen; wenn False, wird die kumulative Summe beim Auftreten von NaN unterbrochen. | True |
| dtype | dtype | Gibt den Datentyp der Ausgabe an. | Keine |
| out | ndarray | Das Array, das zum Speichern des Ergebnisses verwendet wird; muss normalerweise nicht festgelegt werden. | Keine |
Rückgabewert
- Rückgabetyp:
Series - Beschreibung: Gibt eine neue Series zurück, wobei der Wert an jeder Position die kumulative Summe ist.
Beispiele
Anhand einer Reihe von Beispielen von einfach bis komplex wollen wirSeries.cumsum()die Verwendung beherrschen.
Beispiel 1: Grundlegende Verwendung - Berechnung kumulativer Verkäufe
Die kumulative Summe ist die Gesamtsumme aller Werte bis zur aktuellen Position.
Beispiel
# Erstelle eine Series mit täglichen Verkäufen
daily_sales = pd.Series([1000, 1500, 1200, 1800, 2000, 900, 1600])
print("Tägliche Verkäufe (Yuan):")
print(daily_sales)
print()
# Kumulierte Verkäufe berechnen
cumulative_sales = daily_sales.cumsum()
print("Kumulierte Verkäufe (Yuan):")
print(cumulative_sales)
print()
print("Analyse:")
print("- Tag 1 kumuliert: 1000")
print("- Tag 2 kumuliert: 1000 + 1500 = 2500")
print("- Tag 3 kumuliert: 1000 + 1500 + 1200 = 3700")
print("Und so weiter...")
Ausgabe:
每日销售额(元): 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天的销售额 - 以此类推...
Code-Erklärung:
- Kumulierte Summe an Position 1 = 1000
- Kumulierte Summe an Position 2 = 1000 + 1500 = 2500
- Kumulierte Summe an Position 3 = 1000 + 1500 + 1200 = 3700
- Und so weiter...
Beispiel 2: Umgang mit fehlenden Werten
skipnaDer Parameter bestimmt, wie fehlende Werte behandelt werden.
Beispiel
import numpy as np
# Eine Series mit fehlenden Werten erstellen
data_with_nan = pd.Series([10, 20, np.nan, 30, 40])
print("Originaldaten (mit fehlenden Werten):")
print(data_with_nan)
print()
# Standardmäßig skipna=True, NaN beim Berechnen der kumulativen Summe überspringen
cumulative_skipna = data_with_nan.cumsum()
print("Kumulative Summe mit skipna=True (Standard):")
print(cumulative_skipna)
print()
# skipna=False setzen, NaN-Positionen unterbrechen die kumulative Summe
cumulative_no_skipna = data_with_nan.cumsum(skipna=False)
print("Kumulative Summe mit skipna=False:")
print(cumulative_no_skipna)
Ausgabe:
原始数据(含缺失值): 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
Code-Erklärung:
- Wann
skipna=TrueWenn auf True gesetzt, werden NaN-Positionen übersprungen, und nachfolgende kumulative Summen werden auf Basis gültiger Werte fortgesetzt. - Berechnung: 10 → 30 → (überspringen) → 60 → 100
- Wann
skipna=FalseWenn auf False gesetzt, werden alle Positionen nach dem Auftreten von NaN zu NaN.
Beispiel 3: Gemeinsame Analyse mit Originaldaten
In der praktischen Analyse ist es notwendig, sowohl die Originaldaten als auch die kumulierten Daten gleichzeitig zu betrachten.
Beispiel
# Aktienkursdaten erstellen
stock_prices = pd.Series([100, 102, 98, 105, 103, 108, 110])
# Tägliche Änderungen berechnen
daily_change = stock_prices.diff()
# Kumulierte Änderungen berechnen
cum_change = stock_prices.cumsum() - stock_prices.iloc[0] * len(stock_prices) + stock_prices
# Oder einfacher: Verwenden Sie cumsum, um die kumulierte Änderung relativ zum Anfangspreis zu berechnen
print("Aktienkursdaten:")
print(stock_prices.values)
print()
# Die Preisänderung für den Tag berechnen (im Vergleich zum vorherigen Tag)
print("Täglich:")
print(daily_change.fillna(0).values)
print()
# Eine andere Möglichkeit: kumulative Renditen berechnen
cumulative_return = ((stock_prices / stock_prices.iloc[0]) - 1) * 100
print("Kumulative Renditen (%):")
print(cumulative_return.values)
print()
# Kumulativer Wert ausgehend von 100 Yuan
initial_price = 100
cumulative_value = initial_price + stock_prices.cumsum() - stock_prices.iloc[0]
print("Kumulativer Wert (unter der Annahme eines Anfangswerts von 100 Yuan):")
print(cumulative_value.values)
Ausgabe:
股价数据:[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%。
Beispiel 4: Praktische Anwendung - Monatliche kumulative Daten
Veranschaulicht die typische Anwendung von cumsum in der Finanzanalyse.
Beispiel
# Monatliche Umsatzdaten erstellen
monthly_sales = pd.Series({
'Januar': 50000,
'Februar': 62000,
'März': 58000,
'April': 70000,
'Mai': 75000,
'Juni': 80000
})
print("Monatliche Umsätze (yuan):")
print(monthly_sales)
print()
# Monatliche kumulierte Umsätze berechnen
cumulative_sales = monthly_sales.cumsum()
# Übersichtstabelle erstellen
summary = pd.DataFrame({
'Monatliche Umsätze': monthly_sales,
'Kumulierte Umsätze': cumulative_sales,
'Jährliche Zielerreichungsquote': (cumulative_sales / 500000 * 100).round(1)
})
print("Verkaufsübersichtstabelle:")
print(summary)
print()
print(f"Kumulierte Verkäufe im ersten Halbjahr: {cumulative_sales.iloc[-1]} yuan")
print(f"Jährliche Zielerreichungsquote: {cumulative_sales.iloc[-1]/500000*100:.1f}%")
Ausgabe:
月度销售额(元):
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%。
Beispiel 5: Anwendung in DataFrame
cumsum kann auch in einem DataFrame spalten- oder zeilenweise verwendet werden.
Beispiel
# Erstelle einen DataFrame, der Verkäufe mehrerer Produkte enthält
sales_data = pd.DataFrame({
'Produkt A': [100, 150, 120, 180],
'Produkt B': [80, 90, 110, 130],
'Produkt C': [50, 60, 70, 80]
}, index=['Januar', 'Februar', 'März', 'April'])
print("Monatliche Verkaufsdaten:")
print(sales_data)
print()
# Kumulierte Verkäufe nach Spalte berechnen (Standard)
cumulative_by_col = sales_data.cumsum()
print("Kumulierte Verkäufe nach Produkt:")
print(cumulative_by_col)
print()
# Kumulierte Verkäufe nach Zeile berechnen
cumulative_by_row = sales_data.cumsum(axis=1)
print("Kumulierte Verkäufe nach Monat:")
print(cumulative_by_row)
Ausgabe:
月度销售数据:
产品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
Code-Erklärung:
- Standardmäßig,
axis=0Die kumulative Summe wird entlang der Spaltenrichtung berechnet. - Einstellung
axis=1berechnet die kumulative Summe entlang der Zeilenrichtung.
Hinweise
- cumsum gibt eine neue Series zurück und verändert die ursprünglichen Daten nicht.
- Standardmäßig ist skipna=True, und NaN-Werte werden übersprungen.
- Wenn skipna=False, führt das Auftreten von NaN dazu, dass alle nachfolgenden Werte zu NaN werden.
- In einem DataFrame kann der Parameter axis verwendet werden, um die kumulative Richtung zu steuern.
- Die Berechnung der kumulativen Summe ist reihenfolgeabhängig und kann nicht parallelisiert werden.
Zusammenfassung
Series.cumsum()ist eine grundlegende Funktion in der Zeitreihenanalyse. Zu ihren Hauptmerkmalen gehören:
- Berechnet den kumulativen Wert vom Anfang bis zur aktuellen Position.
- Unterstützt die Behandlung fehlender Werte, gesteuert über den Parameter skipna.
- Unterstützt zeilen- oder spaltenweise Berechnung in einem DataFrame.
- Wird häufig in der Finanzanalyse, Vertriebsstatistik, Fortschrittsverfolgung und anderen Szenarien verwendet.
Die kumulative Summe hilft uns, den Trend der Daten im Zeitverlauf zu verstehen, und ist ein wichtiges Werkzeug in der Datenanalyse. In Kombination mit anderen kumulativen Funktionen (wie cumprod, cummax, cummin) kann sie umfassendere Daten-Einblicke liefern.
Andere Erweiterungen
Gängige Pandas-Funktionen