Pandas & NumPy Academy · Lektion

Metoden agg()

Anvend flere aggregeringsfunktioner på én gang med agg(), og send en dict for at beregne forskellige statistikker for forskellige kolonner.

Lektion 3 af 413 trin

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  410

Omdø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        410

Forskellige 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  40

Kolonne-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            120

Navngivne 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         40

Aggregering 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.00

Kombination 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       3

agg() 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.

Gratis at komme i gang

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

  1. Mønsteret split-apply-combine
  2. GroupBy med én eller flere nøgler
  3. Metoden agg()
  4. GroupBy-transformering og -filtrering
← Tilbage til Pandas & NumPy Academy