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