Ce face shift(), diff(), pct_change()
shift(1) mută valorile cu un rând mai jos: fiecare rând primește valoarea din rândul anterior, iar primul rând rămâne lipsă. Cu shift(-1) primești valoarea din rândul următor. fill_value pune altă valoare în locul celei lipsă.
diff() calculează diferența față de rândul anterior (serie - serie.shift(1)), iar pct_change() calculează schimbarea relativă (serie / serie.shift(1) - 1), ca fracție: 0.25 înseamnă o creștere de 25%.
În pandas 3, pct_change() nu mai completează valorile lipsă înainte de calcul (fill_method=None): unde lipsește o valoare, lipsește și rezultatul. Dacă vrei comportamentul vechi, completează explicit cu ffill() înainte.
Parametri
| Parametru | Descriere |
|---|---|
periods |
Cu câte rânduri se mută sau se compară. Implicit 1. Negativ: comparație cu rândurile următoare. |
fill_value |
La shift(): valoarea pusă în rândurile rămase goale. |
freq |
La shift() pe un index de date: mută datele din index cu o durată, în loc să mute valorile. |
Ce returnează
O Series sau un DataFrame de aceeași formă, cu valori lipsă în primele periods rânduri.
Exemple
Exemplul 1: Luna trecută, diferența și creșterea
import pandas as pd
vanzari = pd.DataFrame({"luna": ["ian", "feb", "mar", "apr"], "lei": [1000, 1200, 900, 1350]})
vanzari["luna_trecuta"] = vanzari["lei"].shift(1)
vanzari["diferenta"] = vanzari["lei"].diff()
vanzari["crestere_%"] = (vanzari["lei"].pct_change() * 100).round(1)
print(vanzari)
Rezultat
luna lei luna_trecuta diferenta crestere_%
0 ian 1000 NaN NaN NaN
1 feb 1200 1000.0 200.0 20.0
2 mar 900 1200.0 -300.0 -25.0
3 apr 1350 900.0 450.0 50.0
Exemplul 2: fill_value și comparație cu rândul următor
import pandas as pd
note = pd.Series([7, 8, 6, 9], index=["Ana", "Mihai", "Elena", "Ioana"])
print(note.shift(1, fill_value=0).tolist())
print(note.shift(-1).tolist())
print(note.diff(2).tolist())
Rezultat
[0, 7, 8, 6]
[8.0, 6.0, 9.0, nan]
[nan, nan, -1.0, 1.0]
Exemplul 3: pct_change cu o valoare lipsă
Valoarea lipsă din februarie face lipsă și rezultatele pentru februarie și martie. Cu ffill() înainte, martie se compară cu ianuarie.
import pandas as pd
import numpy as np
lei = pd.Series([100, np.nan, 120, 150], index=["ian", "feb", "mar", "apr"])
print(lei.pct_change())
print(lei.ffill().pct_change())
Rezultat
ian NaN
feb NaN
mar NaN
apr 0.25
dtype: float64
ian NaN
feb 0.00
mar 0.20
apr 0.25
dtype: float64
Greșeli frecvente
- Te aștepți ca
pct_change()să dea procente. Dă fracții (0.2 = 20%); înmulțește cu 100 pentru afișare. - Calculezi
diffpe un tabel nesortat după dată. Diferența se face între rânduri vecine, deci sortează întâi. - Folosești
pct_change(fill_method="ffill")din cod vechi. În pandas 3 apareValueError: fill_method must be None; scrieserie.ffill().pct_change().
Comenzi înrudite
DataFrame.rolling(): Calculează pe o fereastră mobilă de rânduri, de exemplu media ultimelor 3 luni, ca să netezești variațiile.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.fillna() / ffill() / bfill(): Completează valorile lipsă cu o valoare fixă, cu valori diferite pe coloane, cu media sau cu valoarea anterioară ori următoare.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:
shift(), diff(), pct_change()Ai o nelămurire despre utilizarea comenzii
shift(), diff(), pct_change()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.