Nou Generator de prompt AI — scrie prompturi mai bune pentru ChatGPT, Claude și Gemini →

shift(), diff(), pct_change() în pandas

Compară fiecare rând cu cel dinainte: shift mută valorile, diff dă diferența, pct_change dă creșterea procentuală.

Sintaxă
serie.shift(periods=1, fill_value=...)  serie.diff(periods=1)  serie.pct_change(periods=1)

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 diff pe 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 apare ValueError: fill_method must be None; scrie serie.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.
Comunitate & Schimb de cunoștințe

Î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.

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.