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
NaNde la început. Sunt normale: fereastra nu este plină. Foloseștemin_periodsdacă vrei rezultat de la primul rând. - Uiți funcția de la final:
serie.rolling(3)singur nu calculează nimic, returnează doar obiectulRolling. - Pui fereastră numerică pe date neordonate.
rollingmerge în ordinea rândurilor; sortează întâi cusort_index()sausort_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.
Î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.