DataFrame.groupby() în pandas

Împarte tabelul în grupuri după una sau mai multe coloane, ca să calculezi totaluri, medii sau numărări pentru fiecare grup.

Sintaxă
df.groupby(by=None, level=None, *, as_index=True, sort=True, group_keys=True, observed=True, dropna=True)

Ce face DataFrame.groupby()

groupby() pune la un loc rândurile care au aceeași valoare într-o coloană (de exemplu același oraș) și îți permite să calculezi ceva pentru fiecare grup: suma, media, numărul de rânduri. Este echivalentul lui GROUP BY din SQL.

Singur, df.groupby("oras") nu calculează nimic: returnează un obiect DataFrameGroupBy. Rezultatul apare abia când alegi coloana și funcția, de exemplu df.groupby("oras")["suma"].sum(). Funcțiile folosite des sunt sum(), mean(), min(), max(), count() (valorile nelipsă) și size() (toate rândurile, inclusiv cele cu valori lipsă).

Implicit, valorile după care grupezi devin indexul rezultatului și sunt sortate. Cu as_index=False rămân coloane obișnuite, ceea ce e comod când vrei să continui cu rezultatul ca tabel sau să-l salvezi în CSV.

Parametri

Parametru Descriere
by Numele coloanei după care grupezi sau o listă de coloane (["oras", "luna"]). Poate fi și o serie sau o funcție aplicată pe index.
level Grupează după un nivel al indexului (util la un MultiIndex), în loc de o coloană.
as_index Implicit True: cheile de grupare devin index. Cu False rămân coloane în rezultat.
sort Implicit True: grupurile apar sortate după cheie. Cu False apar în ordinea primei apariții.
dropna Implicit True: rândurile cu cheia lipsă (NaN) sunt ignorate. Cu False formează un grup separat.
observed Contează doar pentru coloane category: implicit (True) apar doar categoriile care există în date.

Ce returnează

Un obiect DataFrameGroupBy (sau SeriesGroupBy după ce alegi o coloană). Funcțiile de agregare aplicate pe el returnează o Series sau un DataFrame cu un rând pe grup.

Exemple

Exemplul 1: Totalul și media vânzărilor pe oraș

Alegi coloana suma din grupuri și calculezi suma și media pentru fiecare oraș. Orașele apar sortate alfabetic, ca index.

import pandas as pd

df = pd.DataFrame({
    "oras": ["Iași", "Cluj", "Iași", "Brașov", "Cluj", "Iași"],
    "vanzator": ["Ana", "Mihai", "Ioana", "Radu", "Mihai", "Ana"],
    "suma": [1200, 800, 450, 900, 1500, 300],
})

print(df.groupby("oras")["suma"].sum())
print()
print(df.groupby("oras")["suma"].mean())

Rezultat

oras
Brașov     900
Cluj      2300
Iași      1950
Name: suma, dtype: int64

oras
Brașov     900.0
Cluj      1150.0
Iași       650.0
Name: suma, dtype: float64

Exemplul 2: Grupare după două coloane, cu as_index=False

Cu o listă de coloane primești un rând pentru fiecare combinație oraș + vânzător. as_index=False păstrează cheile ca și coloane, deci rezultatul arată ca un tabel obișnuit.

import pandas as pd

df = pd.DataFrame({
    "oras": ["Iași", "Cluj", "Iași", "Brașov", "Cluj", "Iași"],
    "vanzator": ["Ana", "Mihai", "Ioana", "Radu", "Mihai", "Ana"],
    "suma": [1200, 800, 450, 900, 1500, 300],
})

total = df.groupby(["oras", "vanzator"], as_index=False)["suma"].sum()
print(total)
print(type(total).__name__)

Rezultat

     oras vanzator  suma
0  Brașov     Radu   900
1    Cluj    Mihai  2300
2    Iași      Ana  1500
3    Iași    Ioana   450
DataFrame

Exemplul 3: Diferența dintre size() și count()

Clasa 9A are două rânduri, dar o notă lipsește. size() numără rândurile (2), count() numără doar notele existente (1). Media ignoră valoarea lipsă.

import pandas as pd

df = pd.DataFrame({
    "clasa": ["9A", "9A", "9B", "9B", "9B"],
    "nota": [9, None, 7, 10, 8],
})

g = df.groupby("clasa")
print(g.size())
print()
print(g["nota"].count())
print()
print(g["nota"].mean())

Rezultat

clasa
9A    2
9B    3
dtype: int64

clasa
9A    1
9B    3
Name: nota, dtype: int64

clasa
9A    9.000000
9B    8.333333
Name: nota, dtype: float64

Greșeli frecvente

  • Aștepți un rezultat de la df.groupby("oras") singur. Afișarea lui arată doar <pandas.api.typing.DataFrameGroupBy object at 0x...>: trebuie să alegi o funcție (sum(), mean(), agg()).
  • Calculezi mean() pe tot grupul când tabelul are și coloane de text. Media pe coloane str dă TypeError: alege întâi coloanele numerice (df.groupby("oras")["suma"].mean()) sau folosește numeric_only=True.
  • Confunzi count() cu size(): count() nu numără valorile lipsă, deci poate da numere diferite pe coloane diferite.
  • Uiți că, după grupare, cheile sunt în index. rezultat["oras"] dă KeyError; folosește as_index=False sau reset_index().

Comenzi înrudite

  • agg() / aggregate(): Aplică mai multe funcții de agregare deodată, diferite pe coloane, cu nume alese de tine pentru coloanele rezultatului.
  • groupby().transform(): Calculează o valoare pe grup (suma, media) și o pune înapoi pe fiecare rând, ca să o poți folosi ca o coloană nouă.
  • pd.pivot_table(): Creează un tabel pivot ca în Excel: rânduri după o coloană, coloane după alta și o valoare agregată (sumă, medie) în fiecare celulă.
  • value_counts(): Numără de câte ori apare fiecare valoare într-o coloană (sau fiecare combinație de valori pe rânduri), în ordine descrescătoare.
  • DataFrame.set_index() / reset_index(): set_index face dintr-o coloană indexul rândurilor; reset_index mută indexul înapoi într-o coloană sau îl renumerotează.
Comunitate & Schimb de cunoștințe

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

Ai o nelămurire despre utilizarea comenzii DataFrame.groupby() 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.