agg() / aggregate() în pandas

Aplică mai multe funcții de agregare deodată, diferite pe coloane, cu nume alese de tine pentru coloanele rezultatului.

Sintaxă
df.groupby(chei).agg(func=None, *args, **kwargs)
df.groupby(chei).agg(nume=("coloana", "functie"), ...)
df.agg(func=None, axis=0, *args, **kwargs)

Ce face agg() / aggregate()

agg() (cu numele lung aggregate(), sunt aceeași metodă) calculează mai multe statistici într-un singur pas. Primește un nume de funcție ("sum"), o listă de funcții (["sum", "mean"]) sau un dicționar care spune ce funcție se aplică pe fiecare coloană ({"suma": "sum", "bucati": "max"}).

Forma cea mai clară este named aggregation: agg(total=("suma", "sum")). Numele argumentului (total) devine numele coloanei din rezultat, iar tuplul spune coloana sursă și funcția. Tuplul poate fi scris și ca pd.NamedAgg(column="suma", aggfunc="sum").

agg() există și direct pe DataFrame și Series, fără grupare: df["suma"].agg(["min", "max"]) dă statistici pe toată coloana.

Parametri

Parametru Descriere
func Funcția sau funcțiile: un șir ("sum", "mean", "count", "size", "min", "max", "first"), o funcție Python, o listă de funcții sau un dicționar {coloană: funcție}.
**kwargs La grupări: perechi nume=(coloană, funcție) pentru named aggregation. Altfel, argumente transmise funcției.
axis Doar pe DataFrame.agg: 0 (implicit) agregă fiecare coloană, 1 agregă fiecare rând.

Ce returnează

Un DataFrame (sau o Series pentru o singură funcție pe o singură coloană) cu un rând pe grup. Cu o listă de funcții pe mai multe coloane, coloanele rezultatului au două niveluri (MultiIndex).

Exemple

Exemplul 1: Listă de funcții pe o coloană

Pentru fiecare oraș primești totalul, media și numărul de vânzări, fiecare într-o coloană cu numele funcției.

import pandas as pd

df = pd.DataFrame({
    "oras": ["Iași", "Cluj", "Iași", "Brașov", "Cluj", "Iași"],
    "suma": [1200, 800, 450, 900, 1500, 300],
    "bucati": [4, 2, 1, 3, 5, 1],
})

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

Rezultat

         sum    mean  count
oras                       
Brașov   900   900.0      1
Cluj    2300  1150.0      2
Iași    1950   650.0      3

Exemplul 2: Dicționar: altă funcție pe fiecare coloană

Suma se adună, iar pentru bucăți se ia maximul. Pe ultimul rând, agg e folosit fără grupare, pe toată coloana.

import pandas as pd

df = pd.DataFrame({
    "oras": ["Iași", "Cluj", "Iași", "Brașov", "Cluj", "Iași"],
    "suma": [1200, 800, 450, 900, 1500, 300],
    "bucati": [4, 2, 1, 3, 5, 1],
})

print(df.groupby("oras").agg({"suma": "sum", "bucati": "max"}))
print()
print(df["suma"].agg(["min", "max"]))

Rezultat

        suma  bucati
oras                
Brașov   900       3
Cluj    2300       5
Iași    1950       4

min     300
max    1500
Name: suma, dtype: int64

Exemplul 3: Named aggregation: coloane cu nume alese

Fiecare argument creează o coloană: total, medie și vanzari. pd.NamedAgg este forma lungă a aceluiași tuplu.

import pandas as pd

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

rezumat = df.groupby("oras").agg(
    total=("suma", "sum"),
    medie=("suma", "mean"),
    vanzari=pd.NamedAgg(column="suma", aggfunc="size"),
)
print(rezumat.sort_values("total", ascending=False))

Rezultat

        total   medie  vanzari
oras                          
Cluj     2300  1150.0        2
Iași     1950   650.0        3
Brașov    900   900.0        1

Greșeli frecvente

  • Scrii named aggregation cu un dicționar: agg({"total": ("suma", "sum")}). pandas caută o coloană numită total și dă KeyError. Forma corectă folosește argumente cu nume: agg(total=("suma", "sum")).
  • Folosești o listă de funcții pe mai multe coloane și apoi nu găsești coloana "sum": rezultatul are coloane pe două niveluri, de forma ("suma", "sum"). Named aggregation evită problema.
  • Numele coloanei rezultat nu poate conține spații sau diacritice ca argument Python (total vânzări=... e eroare de sintaxă). Folosește un nume simplu sau **{"total vânzări": ("suma", "sum")}.

Comenzi înrudite

  • DataFrame.groupby(): Împarte tabelul în grupuri după una sau mai multe coloane, ca să calculezi totaluri, medii sau numărări pentru fiecare grup.
  • 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ă.
  • DataFrame.apply() și Series.apply(): Aplică o funcție pe fiecare valoare a unei coloane sau pe fiecare coloană / rând al unui tabel (axis=1 pentru rânduri).
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: agg() / aggregate()

Ai o nelămurire despre utilizarea comenzii agg() / aggregate() 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.