GroupBy med enstaka och flera nycklar
Gruppera efter en eller flera kolumner med groupby() och tillämpa aggregeringar som sum, mean, count och min/max.
GroupBy med enstaka och flera nycklar är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Pandas & NumPy Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.
GroupBy med en enda nyckel
Det enklaste GroupBy-anropet använder en enda kolumn som grupperingsnyckel. Ni anropar df.groupby('column_name') och kedjar en aggregation. Pandas skapar en grupp för varje unikt värde i kolumnen och tillämpar aggregation på varje numerisk kolumn, eller på den valda kolumnen. Detta är den vanligaste formen av GroupBy i daglig analys.
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'HR', 'Eng', 'HR', 'Eng'],
'salary': [90000, 60000, 95000, 62000, 88000],
'years': [3, 5, 7, 2, 4]
})
print(df.groupby('dept')['salary'].mean())
# dept
# Eng 91000.0
# HR 61000.0Välj vilka kolumner som ska aggregeras
Efter att Ni har anropat groupby() kan Ni välja en kolumn med hakparenteser för att få en SeriesGroupBy, eller välja flera kolumner med en lista för att få en DataFrameGroupBy. Om Ni helt utelämnar valet aggregerar Pandas alla numeriska kolumner. Det är praktiskt, men kan ge oväntade resultat om det finns numeriska kolumner som inte är relevanta.
# Single column result -> SeriesGroupBy
print(df.groupby('dept')['salary'].sum())
# Multiple columns result -> DataFrameGroupBy
print(df.groupby('dept')[['salary', 'years']].mean())
# salary years
# dept
# Eng 91000.0 4.667
# HR 61000.0 3.500Alla vanliga aggregationer
Pandas stöder en komplett uppsättning inbyggda aggregationsmetoder på GroupBy-objekt: sum(), mean(), median(), min(), max(), count(), std(), var(), first() och last(). Var och en returnerar ett skalärt värde per grupp, vilket ger Er en tydlig sammanfattningstabell indexerad efter grupperingsnyckeln.
g = df.groupby('dept')['salary']
print('sum: ', g.sum())
print('mean: ', g.mean())
print('min: ', g.min())
print('max: ', g.max())
print('count: ', g.count())
print('std: ', g.std().round(2))GroupBy med flera nycklar
Skicka en lista med kolumnnamn till groupby() för att gruppera efter mer än en dimension samtidigt. Varje unik kombination av värden i kolumnerna blir en egen grupp. Resultatet har ett MultiIndex med en nivå per grupperingskolumn, vilket gör att Ni kan gå ner på detaljnivå i sammanfattningar över flera dimensioner i ett enda steg.
df2 = pd.DataFrame({
'dept': ['Eng', 'Eng', 'HR', 'HR', 'Eng', 'HR'],
'level': ['L1', 'L2', 'L1', 'L2', 'L1', 'L1'],
'salary': [80000, 100000, 55000, 70000, 82000, 58000]
})
result = df2.groupby(['dept', 'level'])['salary'].mean()
print(result)
# dept level
# Eng L1 81000.0
# L2 100000.0
# HR L1 56500.0
# L2 70000.0Kom åt resultat med MultiIndex
När Ni grupperar efter flera nycklar blir resultatets index ett MultiIndex. Ni kan komma åt en specifik yttre nivå med .loc['value'] och navigera bland inre nivåer med tupler. Om Ni anropar reset_index() omvandlas MultiIndex till vanliga kolumner, vilket ofta är mer praktiskt för fortsatta operationer eller export.
result = df2.groupby(['dept', 'level'])['salary'].mean()
# Access Engineering rows only
print(result.loc['Eng'])
# level
# L1 81000.0
# L2 100000.0
# Flatten to a regular DataFrame
print(result.reset_index())
# dept level salary
# 0 Eng L1 81000.0
# 1 Eng L2 100000.0Använda as_index=False
Som standard blir grupperingskolumnerna index i resultatet. Om Ni skickar med as_index=False behålls de i stället som vanliga kolumner, vilket ger en platt DataFrame som är enklare att skicka vidare till andra Pandas-operationer eller exportera. Detta motsvarar att anropa reset_index() på resultatet.
flat = df2.groupby(['dept', 'level'], as_index=False)['salary'].mean()
print(flat)
# dept level salary
# 0 Eng L1 81000.0
# 1 Eng L2 100000.0
# 2 HR L1 56500.0
# 3 HR L2 70000.0Räkna rader per grupp
count() returnerar antalet icke-null-värden i varje grupp. Om Ni vill ha det totala antalet rader per grupp, oavsett null-värden, använder Ni i stället size(). Skillnaden är viktig när Era data innehåller saknade värden, eftersom count() räknar grupper med NaN-poster för lågt.
import numpy as np
df3 = pd.DataFrame({
'dept': ['Eng', 'Eng', 'HR', 'HR'],
'bonus': [5000, np.nan, 3000, 4000]
})
print(df3.groupby('dept')['bonus'].count()) # ignores NaN
# dept
# Eng 1
# HR 2
print(df3.groupby('dept')['bonus'].size()) # includes NaN rows
# dept
# Eng 2
# HR 2Sortera GroupBy-resultat
Som standard sorterar GroupBy resultatet efter gruppnyckeln. Ni kan inaktivera sorteringen med sort=False för att behålla den ursprungliga ordningen för det första förekomsten, vilket är något snabbare för stora datamängder. När resultatet är en DataFrame kan Ni sortera det vidare med sort_values() efter valfri kolumn.
result = (df.groupby('dept', sort=False)['salary']
.mean()
.reset_index()
.sort_values('salary', ascending=False))
print(result)
# dept salary
# 0 Eng 91000.0
# 1 HR 61000.0Kedja GroupBy med andra metoder
GroupBy-resultat är vanliga Series- eller DataFrame-objekt, så Ni kan direkt kedja ytterligare Pandas-metoder på dem. Ett vanligt mönster är att aggregera, sedan anropa reset_index(), därefter byta namn på kolumner och slutligen anropa sort_values() – allt i en enda lättläst metodkedja utan att lagra mellanliggande variabler.
summary = (
df
.groupby('dept')['salary']
.agg(['mean', 'count'])
.rename(columns={'mean': 'avg_salary', 'count': 'headcount'})
.reset_index()
.sort_values('avg_salary', ascending=False)
)
print(summary)Tillämpa sum, mean och count samtidigt
Ofta behöver Ni mer än ett statistiskt mått per grupp. Skicka en lista med funktionsnamn till .agg() för att beräkna flera mått samtidigt. Resultatet blir en DataFrame med en kolumn för varje funktion. Detta är effektivare än att anropa varje aggregation separat, eftersom Pandas bearbetar alla i en enda genomgång av data.
result = df.groupby('dept')['salary'].agg(['sum', 'mean', 'count', 'max'])
print(result)
# sum mean count max
# dept
# Eng 273000 91000.0 3 95000
# HR 122000 61000.0 2 62000Gruppera efter kategoriska kolumner
När en grupperingskolumn har datatypen Categorical inkluderar Pandas som standard alla kategorier i resultatet, även de som inte har några rader. Det kan vara användbart för att säkerställa att sammanfattningstabellen alltid visar alla kategorier, men det skapar rader med NaN eller 0 för tomma grupper. Ni styr detta med parametern observed (sätt den till True för att hoppa över tomma kategorier).
df['dept'] = df['dept'].astype('category')
# With observed=True, only groups that appear in data are included
print(df.groupby('dept', observed=True)['salary'].mean())
# dept
# Eng 91000.0
# HR 61000.0Snabb kontroll
Testa Era kunskaper om GroupBy med enstaka och flera nycklar från den här lektionen.
Lektionssammanfattning
I den här lektionen har Ni lärt Er hur Ni grupperar efter en enda kolumn och tillämpar vanliga aggregationer, hur Ni grupperar efter flera kolumner för att skapa sammanfattningar över flera dimensioner samt skillnaden mellan count() och size() när null-värden förekommer. Härnäst utforskar vi den kraftfulla metoden agg() för att beräkna flera olika statistiska mått i ett enda anrop.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”GroupBy med enstaka och flera nycklar” gratis?
Ja – hela texten till ”GroupBy med enstaka och flera nycklar” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Pandas & NumPy Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”GroupBy med enstaka och flera nycklar”?
Gruppera efter en eller flera kolumner med groupby() och tillämpa aggregeringar som sum, mean, count och min/max. Ni övar på Pandas & NumPy Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Pandas & NumPy Academy?
Du behöver inga förkunskaper. Utbildningen i Pandas & NumPy Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”GroupBy med enstaka och flera nycklar”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Pandas & NumPy Academy-lektionen?
Ja. Varje Pandas & NumPy Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Mönstret dela upp–tillämpa–kombinera
- GroupBy med enstaka och flera nycklar
- Metoden agg()
- GroupBy-transformering och filtrering