Il metodo agg()
Applichi più funzioni di aggregazione contemporaneamente con agg() e passi un dict per calcolare statistiche diverse per colonne diverse.
Il metodo agg() è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Perché usare agg()?
Chiamare direttamente sum() o mean() su un oggetto GroupBy restituisce una sola statistica. Tuttavia, nelle analisi reali spesso servono più statistiche contemporaneamente, ad esempio il ricavo totale, il valore medio dell’ordine e il numero di ordini per regione. Il metodo agg() (abbreviazione di aggregate) consente di calcolarle tutte in un’unica chiamata efficiente, invece di eseguire aggregazioni separate e unirne i risultati.
Passaggio di un elenco di nomi di funzione
L’utilizzo più semplice di agg() consiste nel passare un elenco di stringhe contenenti nomi di funzione. Pandas applica ogni funzione alla colonna selezionata e restituisce un DataFrame in cui ogni colonna corrisponde a una funzione. Questo approccio funziona con qualsiasi nome di aggregazione integrata: 'sum', 'mean', 'min', 'max', 'count', 'std', 'median' e altri.
import pandas as pd
df = pd.DataFrame({
'region': ['East', 'West', 'East', 'West', 'East', 'West'],
'revenue': [200, 340, 150, 290, 310, 410],
'units': [20, 35, 15, 30, 28, 40]
})
result = df.groupby('region')['revenue'].agg(['sum', 'mean', 'count', 'max'])
print(result)
# sum mean count max
# region
# East 660 220.000000 3 310
# West 1040 346.666667 3 410Ridenominazione delle colonne di output con aggregazioni con nome
Quando passa un elenco di stringhe, le colonne di output vengono denominate in base alle funzioni stesse ('sum', 'mean' ecc.). Per ottenere un output più ordinato, utilizzi le aggregazioni con nome: passi argomenti keyword in cui la chiave è il nome desiderato della colonna e il valore è una tupla di (column, function). Questo è l’approccio moderno di Pandas e produce codice autoesplicativo.
result = df.groupby('region').agg(
total_revenue=('revenue', 'sum'),
avg_revenue=('revenue', 'mean'),
order_count=('revenue', 'count'),
max_order=('revenue', 'max')
)
print(result)
# total_revenue avg_revenue order_count max_order
# region
# East 660 220.000000 3 310
# West 1040 346.666667 3 410Funzioni diverse per colonne diverse
Può passare un dizionario a agg(), in cui ogni chiave è il nome di una colonna e ogni valore è una funzione, o un elenco di funzioni, da applicare a quella colonna. Questo Le consente, ad esempio, di calcolare sum su revenue e mean su units, tutto in un’unica chiamata GroupBy.
result = df.groupby('region').agg({
'revenue': ['sum', 'mean'],
'units': ['sum', 'max']
})
print(result)
# revenue units
# sum mean sum max
# region
# East 660 220.000000 63 28
# West 1040 346.666667 105 40MultiIndex delle colonne da agg() con dizionario
Quando passa un dizionario con più funzioni per colonna, il risultato presenta un MultiIndex sulle colonne. Il primo livello è il nome della colonna originale, mentre il secondo è il nome della funzione. Può appiattire questi nomi di colonna in un’unica stringa con una list comprehension, rendendo il risultato più facile da usare nelle fasi successive.
result = df.groupby('region').agg({'revenue': ['sum', 'mean'], 'units': 'sum'})
# Flatten MultiIndex columns
result.columns = ['_'.join(c).strip() for c in result.columns]
print(result.columns.tolist())
# ['revenue_sum', 'revenue_mean', 'units_sum']Utilizzo di funzioni personalizzate in agg()
Oltre ai nomi sotto forma di stringa, può passare a agg() qualsiasi callable Python. La funzione riceve una Series, ovvero i valori di quella colonna in un gruppo, e deve restituire uno scalare. Può passare una lambda o una funzione con nome. Le funzioni personalizzate sono più flessibili, ma più lente di quelle integrate nominate, perché non possono utilizzare le ottimizzazioni a livello C.
def revenue_range(s):
return s.max() - s.min()
result = df.groupby('region')['revenue'].agg(['sum', revenue_range])
print(result)
# sum revenue_range
# region
# East 660 160
# West 1040 120Aggregazioni con nome e funzioni personalizzate
La sintassi delle aggregazioni con nome funziona anche con funzioni chiamabili, non solo con nomi stringa. È sufficiente passare una tupla di (column, function) come valore dell'argomento con nome, dove la funzione è una qualsiasi funzione chiamabile che accetta una Series e restituisce uno scalare. In questo modo il codice rimane leggibile anche quando si combinano funzioni integrate e logica personalizzata.
result = df.groupby('region').agg(
total=('revenue', 'sum'),
spread=('revenue', lambda s: s.max() - s.min()),
top_units=('units', 'max')
)
print(result)
# total spread top_units
# region
# East 660 160 28
# West 1040 120 40Aggregazione senza selezionare una colonna
Quando si chiama agg() su un GroupBy senza selezionare una colonna specifica, Pandas applica la funzione a ogni colonna numerica del DataFrame. È un modo rapido per ottenere contemporaneamente un riepilogo di tutte le colonne numeriche. Tenga presente che le colonne con tipi di dati non numerici vengono generalmente ignorate senza avviso nella maggior parte delle aggregazioni.
# Aggregate all numeric columns in one call
result = df.groupby('region').agg(['sum', 'mean'])
print(result)
# revenue units
# sum mean sum mean
# region
# East 660 220.000000 63 21.00
# West 1040 346.666667 105 35.00Combinare agg() con reset_index()
Dopo agg(), le colonne usate per il raggruppamento diventano l'indice. Un approccio comune consiste nel chiamare subito reset_index() per ottenere un DataFrame piatto, in cui le chiavi dei gruppi sono normali colonne. È quindi possibile rinominare, ordinare e filtrare il risultato come qualsiasi altro DataFrame, così da poterlo passare facilmente alle fasi successive o esportarlo.
summary = (
df.groupby('region')
.agg(total=('revenue', 'sum'), orders=('revenue', 'count'))
.reset_index()
.sort_values('total', ascending=False)
)
print(summary)
# region total orders
# 1 West 1040 3
# 0 East 660 3agg() vs transform() vs apply()
È importante distinguere tre metodi di GroupBy: agg() riduce ogni gruppo a uno scalare, producendo un risultato con meno righe rispetto all'originale. transform() restituisce un array con la stessa forma dell'input, consentendo di aggiungere statistiche a livello di gruppo come nuove colonne. apply() è il metodo più flessibile, ma anche il più lento, e verrà trattato nella lezione successiva.
# agg: one row per group
print(df.groupby('region')['revenue'].agg('mean'))
# region
# East 220.0
# West 346.7
# transform: one row per original row (group mean broadcast back)
df['group_mean'] = df.groupby('region')['revenue'].transform('mean')
print(df[['region', 'revenue', 'group_mean']].head())Esempio pratico: riepilogo delle vendite
Ecco un esempio realistico completo: calcolare una tabella riepilogativa delle vendite con ricavi totali, valore medio degli ordini, numero di ordini e intervallo dei ricavi per regione, usando nomi di colonna chiari e ordinando per ricavi totali in ordine decrescente. Questo approccio è direttamente applicabile ai flussi di lavoro di analisi di prodotto, finanza e marketing.
summary = (
df.groupby('region')
.agg(
total_revenue=('revenue', 'sum'),
avg_order=('revenue', 'mean'),
num_orders=('revenue', 'count'),
revenue_range=('revenue', lambda s: s.max() - s.min())
)
.reset_index()
.sort_values('total_revenue', ascending=False)
.round(2)
)
print(summary)Verifica rapida
Verifichi la Sua comprensione del metodo agg() presentato in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato a calcolare più aggregazioni contemporaneamente con agg(), a usare le aggregazioni con nome per ottenere nomi di colonna chiari e ad applicare funzioni diverse a colonne diverse usando un dizionario. Nella prossima lezione esploreremo transform() e filter(), che aggiungono nuovamente al DataFrame originale informazioni a livello di gruppo.
Domande Frequenti
La lezione «Il metodo agg()» è gratuita?
Sì — il testo completo di «Il metodo agg()» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Cosa imparerò in «Il metodo agg()»?
Applichi più funzioni di aggregazione contemporaneamente con agg() e passi un dict per calcolare statistiche diverse per colonne diverse. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?
Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Il metodo agg()»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?
Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Il pattern Split-Apply-Combine
- GroupBy con una o più chiavi
- Il metodo agg()
- Trasformazione e filtro con GroupBy