Metoden agg()
Anvend flere aggregeringsfunktioner på én gang med agg(), og send en dict for at beregne forskellige statistikker for forskellige kolonner.
Metoden agg() er en gratis Pandas & NumPy Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Pandas & NumPy Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Pandas & NumPy Academy-kurset indeholder 4 lektioner i alt.
Hvorfor bruge agg()?
Når du kalder sum() eller mean() direkte på et GroupBy-objekt, får du én enkelt statistik. I virkelige analyser har du dog ofte brug for flere statistikker på én gang — for eksempel den samlede omsætning, den gennemsnitlige ordrestørrelse og antallet af ordrer pr. region. Metoden agg() (en forkortelse for aggregate) lader dig beregne alle disse i ét effektivt kald i stedet for at køre separate aggregeringer og flette resultaterne sammen.
Angivelse af en liste med funktionsnavne
Den enkleste brug af agg() er at angive en liste med strenge, der indeholder funktionsnavne. Pandas anvender hver funktion på den valgte kolonne og returnerer en DataFrame, hvor hver kolonne svarer til én funktion. Denne tilgang fungerer med alle indbyggede aggregeringsnavne: 'sum', 'mean', 'min', 'max', 'count', 'std', 'median' og flere.
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 410Omdøbning af resultatkolonner med navngivne aggregeringer
Når du angiver en liste med strenge, navngives resultatkolonnerne efter selve funktionerne ('sum', 'mean' osv.). Du får et mere overskueligt resultat ved at bruge navngivne aggregeringer: angiv nøgleordsargumenter, hvor nøglen er det ønskede kolonnenavn, og værdien er en tupel med (column, function). Dette er den moderne tilgang i Pandas og giver selvforklarende kode.
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 410Forskellige funktioner for forskellige kolonner
Du kan sende en ordbog til agg(), hvor hver nøgle er et kolonnenavn, og hver værdi er en funktion eller en liste med funktioner, der skal anvendes på kolonnen. På den måde kan du for eksempel beregne sum for revenue og mean for units i ét enkelt GroupBy-kald.
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 40Kolonne-MultiIndex fra dict agg()
Når du sender en ordbog med flere funktioner pr. kolonne, har resultatet et MultiIndex på kolonnerne. Det første niveau er det oprindelige kolonnenavn, og det andet niveau er funktionsnavnet. Du kan omdanne disse kolonnenavne til én enkelt streng med en listeforståelse, så resultatet bliver lettere at arbejde videre med.
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']Brug af brugerdefinerede funktioner i agg()
Ud over strengnavne kan du sende enhver Python-kaldbar funktion til agg(). Funktionen modtager en Series — værdierne for den pågældende kolonne i én gruppe — og skal returnere en skalar. Du kan sende en lambda eller en navngiven funktion. Brugerdefinerede funktioner er mere fleksible, men langsommere end indbyggede navngivne funktioner, fordi de ikke kan bruge optimeringer på C-niveau.
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 120Navngivne aggregeringer med brugerdefinerede funktioner
Navngiven aggregeringssyntaks fungerer også med kaldelige funktioner, ikke kun med strengnavne. Du skal blot angive en tupel med (column, function) som værdi for nøgleordsargumentet, hvor funktionen kan kaldes, tager imod en Series og returnerer en skalar. Det holder koden læsbar, selv når du kombinerer indbyggede funktioner med brugerdefineret logik.
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 40Aggregering uden valg af kolonne
Når du kalder agg() på en GroupBy uden at vælge en bestemt kolonne, anvender Pandas funktionen på alle numeriske kolonner i DataFrame. Det er en hurtig måde at få en oversigt over alle numeriske kolonner på én gang. Vær opmærksom på, at kolonner med ikke-numeriske datatyper i de fleste aggregeringer springes over uden meddelelse.
# 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.00Kombination af agg() og reset_index()
Efter agg() bliver grupperingskolonnen eller -kolonnerne til indekset. Et almindeligt mønster er straks at kalde reset_index() for at få en flad DataFrame, hvor gruppenøglerne er almindelige kolonner. Derefter kan du omdøbe, sortere og filtrere resultatet som enhver anden DataFrame, så det nemt kan sendes videre eller eksporteres.
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() kontra transform() kontra apply()
Det er vigtigt at skelne mellem tre GroupBy-metoder: agg() reducerer hver gruppe til en skalar og giver et resultat med færre rækker end det oprindelige. transform() returnerer et array med samme form som inputtet, så du kan tilføje statistik på gruppeniveau som nye kolonner. apply() er den mest fleksible, men også den langsomste, og gennemgås i næste lektion.
# 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())Praktisk eksempel: salgsoversigt
Her er et realistisk eksempel fra start til slut: Beregn en salgstabel med samlet omsætning, gennemsnitlig ordreværdi, antal ordrer og omsætningsinterval pr. region, med tydelige kolonnenavne og sorteret efter samlet omsætning i faldende rækkefølge. Dette mønster kan anvendes direkte i arbejdsgange for produkt-, finans- og marketinganalyse.
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)Hurtig kontrol
Test din forståelse af metoden agg() fra denne lektion.
Opsummering af lektionen
I denne lektion har du lært, hvordan du beregner flere aggregeringer på én gang med agg(), hvordan du bruger navngivne aggregeringer til tydelige kolonnenavne, og hvordan du anvender forskellige funktioner på forskellige kolonner ved hjælp af en dict. Dernæst undersøger vi transform() og filter(), som føjer oplysninger på gruppeniveau tilbage til den oprindelige DataFrame.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Metoden agg()” gratis?
Ja — hele teksten til “Metoden agg()” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Pandas & NumPy Academy-kurset, skal du opgradere til CoddyKit PRO. Pandas & NumPy Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Metoden agg()”?
Anvend flere aggregeringsfunktioner på én gang med agg(), og send en dict for at beregne forskellige statistikker for forskellige kolonner. Du øver dig i Pandas & NumPy Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Pandas & NumPy Academy?
Der kræves ingen tidligere erfaring. Pandas & NumPy Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Metoden agg()”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Pandas & NumPy Academy-lektion?
Ja. Alle Pandas & NumPy Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Mønsteret split-apply-combine
- GroupBy med én eller flere nøgler
- Metoden agg()
- GroupBy-transformering og -filtrering