0Pricing
Pandas & NumPy Academy · Lekcja

GroupBy z jednym i wieloma kluczami

Grupuj dane według jednej lub wielu kolumn za pomocą groupby() i stosuj agregacje sum, mean, count oraz min/max.

GroupBy z jednym i wieloma kluczami to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

GroupBy z pojedynczym kluczem

Najprostsze wywołanie GroupBy używa pojedynczej kolumny jako klucza grupowania. Wywołują Państwo df.groupby('column_name') i łączą je z agregacją. Pandas tworzy jedną grupę dla każdej unikatowej wartości w tej kolumnie i stosuje agregację do każdej kolumny numerycznej (lub wybranej kolumny). Jest to najczęściej spotykana forma GroupBy w codziennej analizie.

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.0

Wybór kolumn do agregacji

Po wywołaniu groupby() można wybrać jedną kolumnę za pomocą notacji nawiasowej, aby uzyskać obiekt SeriesGroupBy, albo wiele kolumn za pomocą listy, aby uzyskać obiekt DataFrameGroupBy. Jeśli wybór zostanie całkowicie pominięty, Pandas agreguje wszystkie kolumny numeryczne. Jest to wygodne, ale może prowadzić do nieoczekiwanych wyników, gdy dane zawierają nieistotne kolumny numeryczne.

# 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.500

Wszystkie typowe agregacje

Pandas obsługuje pełny zestaw wbudowanych metod agregujących dla obiektów GroupBy: sum(), mean(), median(), min(), max(), count(), std(), var(), first() i last(). Każda z nich zwraca skalar dla każdej grupy, zapewniając przejrzystą tabelę podsumowania z indeksem opartym na kluczu grupowania.

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 z wieloma kluczami

Przekaż listę nazw kolumn do groupby(), aby jednocześnie grupować według więcej niż jednego wymiaru. Każda unikatowa kombinacja wartości w tych kolumnach staje się osobną grupą. Wynik zawiera MultiIndex z jednym poziomem dla każdej kolumny grupowania, co pozwala w jednym kroku analizować podsumowania wielowymiarowe.

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.0

Dostęp do wyników MultiIndex

Podczas grupowania według wielu kluczy indeks wyniku jest obiektem MultiIndex. Do określonego poziomu zewnętrznego można uzyskać dostęp za pomocą .loc['value'], a po poziomach wewnętrznych poruszać się za pomocą krotek. Wywołanie reset_index() spłaszcza MultiIndex do postaci zwykłych kolumn, co często ułatwia dalsze operacje lub eksport.

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.0

Używanie as_index=False

Domyślnie kolumny grupowania stają się indeksem wyniku. Przekazanie as_index=False pozostawia je jako zwykłe kolumny, zapewniając płaski DataFrame, który łatwiej przekazać do kolejnych operacji Pandas lub wyeksportować. Odpowiada to wywołaniu reset_index() na wyniku.

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.0

Zliczanie wierszy w każdej grupie

count() zwraca liczbę wartości niebędących wartościami null w każdej grupie. Jeśli chcą Państwo uzyskać całkowitą liczbę wierszy w grupie, niezależnie od wartości null, należy użyć zamiast tego size(). To rozróżnienie ma znaczenie, gdy dane zawierają braki, ponieważ count() zaniży liczebność grup zawierających wpisy NaN.

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     2

Sortowanie wyników GroupBy

Domyślnie GroupBy sortuje wynik według klucza grupy. Sortowanie można wyłączyć za pomocą sort=False, aby zachować pierwotną kolejność pierwszego wystąpienia; w przypadku dużych zbiorów danych jest to nieco szybsze. Gdy wynik jest już obiektem DataFrame, można posortować go dodatkowo według dowolnej kolumny za pomocą sort_values().

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.0

Łączenie GroupBy z innymi metodami

Wyniki GroupBy są zwykłymi obiektami Series lub DataFrame, dlatego można od razu łączyć je z kolejnymi metodami Pandas. Typowy wzorzec polega na agregacji, następnie wywołaniu reset_index(), zmianie nazw kolumn i wywołaniu sort_values() — wszystko w jednym czytelnym łańcuchu metod, bez przechowywania zmiennych pośrednich.

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)

Jednoczesne stosowanie sum, mean i count

Często potrzebują Państwo więcej niż jednej statystyki dla każdej grupy. Przekazanie listy nazw funkcji do .agg() pozwala obliczyć kilka statystyk jednocześnie. Wynikiem jest DataFrame z osobną kolumną dla każdej funkcji. Jest to wydajniejsze niż wywoływanie każdej agregacji osobno, ponieważ Pandas przetwarza je wszystkie w jednym przebiegu danych.

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  62000

Grupowanie według kolumn kategorycznych

Gdy kolumna grupowania ma typ danych Categorical, Pandas domyślnie uwzględnia w wyniku wszystkie kategorie, nawet te, które nie zawierają żadnych wierszy. Może to być przydatne, aby tabela podsumowania zawsze pokazywała każdą kategorię, ale tworzy wiersze z wartościami NaN lub 0 dla pustych grup. Można sterować tym za pomocą parametru observed (ustawienie True pomija puste kategorie).

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.0

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat GroupBy z pojedynczymi i wieloma kluczami z tej lekcji.

Podsumowanie lekcji

W tej lekcji poznali Państwo: grupowanie według pojedynczej kolumny i stosowanie typowych agregacji, grupowanie według wielu kolumn w celu tworzenia podsumowań wielowymiarowych oraz różnicę między count() i size(), gdy występują wartości null. Następnie omówimy potężną metodę agg(), służącą do obliczania wielu różnych statystyk w jednym wywołaniu.

Często zadawane pytania

Czy lekcja „GroupBy z jednym i wieloma kluczami” jest bezpłatna?

Tak — pełny tekst „GroupBy z jednym i wieloma kluczami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „GroupBy z jednym i wieloma kluczami”?

Grupuj dane według jednej lub wielu kolumn za pomocą groupby() i stosuj agregacje sum, mean, count oraz min/max. Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „GroupBy z jednym i wieloma kluczami”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wzorzec Split-Apply-Combine
  2. GroupBy z jednym i wieloma kluczami
  3. Metoda agg()
  4. Transformacja i filtrowanie GroupBy
← Powrót do Pandas & NumPy Academy