DataFrame.rolling() în pandas

Calculează pe o fereastră mobilă de rânduri, de exemplu media ultimelor 3 luni, ca să netezești variațiile.

Sintaxă
df.rolling(window, min_periods=None, center=False, on=None, ...).mean()

Ce face DataFrame.rolling()

rolling(window) ia, pentru fiecare rând, ultimele window rânduri (inclusiv rândul curent) și calculează pe ele funcția aleasă: mean(), sum(), min(), max(). Media mobilă pe 3 luni este serie.rolling(3).mean().

Primele rânduri nu au destule valori în urmă, așa că rezultatul lor este lipsă (NaN). Cu min_periods=1, calculul se face cu câte valori există.

Pe un index de date, fereastra poate fi și o durată, de exemplu rolling("7D") pentru ultimele 7 zile calendaristice.

Parametri

Parametru Descriere
window Mărimea ferestrei: un număr de rânduri (3) sau o durată ("7D") pe un index de date.
min_periods Câte valori trebuie să existe ca rezultatul să nu fie lipsă. Implicit egal cu window (pentru ferestre numerice).
center True: fereastra este centrată pe rândul curent, nu terminată în el.
on La un DataFrame: coloana de date folosită în locul indexului.

Ce returnează

Un obiect Rolling; după mean(), sum() etc. primești o Series sau un DataFrame de aceeași lungime.

Exemple

Exemplul 1: Media mobilă pe 3 luni

Primele două luni nu au trei valori în urmă și rămân NaN. Pentru martie: (120 + 90 + 150) / 3 = 120.

import pandas as pd

vanzari = pd.Series([120, 90, 150, 180, 130, 210],
                    index=pd.date_range("2026-01-01", periods=6, freq="MS"), name="lei")
df = pd.DataFrame({"lei": vanzari, "medie_3_luni": vanzari.rolling(3).mean()})
print(df)

Rezultat

            lei  medie_3_luni
2026-01-01  120           NaN
2026-02-01   90           NaN
2026-03-01  150    120.000000
2026-04-01  180    140.000000
2026-05-01  130    153.333333
2026-06-01  210    173.333333

Exemplul 2: min_periods=1 și suma pe fereastră

import pandas as pd

vizite = pd.Series([5, 8, 3, 10, 7], name="vizite")
print(pd.DataFrame({
    "vizite": vizite,
    "medie": vizite.rolling(3, min_periods=1).mean().round(2),
    "suma_2": vizite.rolling(2).sum(),
}))

Rezultat

   vizite  medie  suma_2
0       5   5.00     NaN
1       8   6.50    13.0
2       3   5.33    11.0
3      10   7.00    13.0
4       7   6.67    17.0

Exemplul 3: Fereastră de 7 zile calendaristice

Cu o durată, fereastra numără zile, nu rânduri, așa că zilele lipsă nu strică media.

import pandas as pd

temperaturi = pd.Series([12, 14, 11, 9, 15],
                        index=pd.to_datetime(["2026-10-01", "2026-10-02", "2026-10-05", "2026-10-08", "2026-10-09"]))
print(temperaturi.rolling("7D").mean().round(1))

Rezultat

2026-10-01    12.0
2026-10-02    13.0
2026-10-05    12.3
2026-10-08    11.3
2026-10-09    11.7
dtype: float64

Greșeli frecvente

  • Te miri de valorile NaN de la început. Sunt normale: fereastra nu este plină. Folosește min_periods dacă vrei rezultat de la primul rând.
  • Uiți funcția de la final: serie.rolling(3) singur nu calculează nimic, returnează doar obiectul Rolling.
  • Pui fereastră numerică pe date neordonate. rolling merge în ordinea rândurilor; sortează întâi cu sort_index() sau sort_values().

Comenzi înrudite

  • cumsum(), cummax(), expanding(): Calcule cumulate de la primul rând până la rândul curent: total până acum, maximul de până acum, media de până acum.
  • shift(), diff(), pct_change(): Compară fiecare rând cu cel dinainte: shift mută valorile, diff dă diferența, pct_change dă creșterea procentuală.
  • DataFrame.resample(): Grupează o serie de timp pe intervale (săptămâni, luni) și calculează câte o valoare pe interval: sumă, medie, număr.
  • DataFrame.groupby(): Împarte tabelul în grupuri după una sau mai multe coloane, ca să calculezi totaluri, medii sau numărări pentru fiecare grup.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: DataFrame.rolling()

Ai o nelămurire despre utilizarea comenzii DataFrame.rolling() sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.