Metoda agg()
Zastosuj jednocześnie wiele funkcji agregujących za pomocą agg() i przekaż słownik, aby obliczyć różne statystyki dla różnych kolumn.
Metoda agg() to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 3 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.
Dlaczego używać agg()?
Bezpośrednie wywołanie sum() lub mean() na obiekcie GroupBy daje jedną statystykę. Jednak rzeczywiste analizy często wymagają wielu statystyk jednocześnie — na przykład łącznego przychodu, średniej wartości zamówienia i liczby zamówień dla każdego regionu. Metoda agg() (skrót od aggregate) pozwala obliczyć je wszystkie w jednym wydajnym wywołaniu, zamiast wykonywać osobne agregacje i scalać wyniki.
Przekazywanie listy nazw funkcji
Najprostsze użycie agg() polega na przekazaniu listy ciągów znaków zawierających nazwy funkcji. Pandas stosuje każdą funkcję do wybranej kolumny i zwraca DataFrame, w którym każda kolumna odpowiada jednej funkcji. To podejście działa z dowolną wbudowaną nazwą agregacji: 'sum', 'mean', 'min', 'max', 'count', 'std', 'median' i innymi.
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 410Zmiana nazw kolumn wynikowych za pomocą agregacji nazwanych
Po przekazaniu listy ciągów znaków kolumny wynikowe otrzymują nazwy odpowiadające samym funkcjom ('sum', 'mean' itd.). Aby uzyskać czytelniejszy wynik, należy użyć agregacji nazwanych: przekazać argumenty słów kluczowych, w których klucz jest żądaną nazwą kolumny, a wartość — krotką (column, function). Jest to nowoczesne podejście w Pandas, które tworzy kod samodokumentujący się.
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 410Różne funkcje dla różnych kolumn
Do agg() można przekazać słownik, w którym każdy klucz jest nazwą kolumny, a każda wartość — funkcją (lub listą funkcji) stosowaną do tej kolumny. Pozwala to na przykład obliczyć sum dla revenue, a mean dla units, w jednym wywołaniu 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 kolumn z dict agg()
Po przekazaniu słownika z wieloma funkcjami dla jednej kolumny wynik zawiera MultiIndex kolumn. Pierwszy poziom to pierwotna nazwa kolumny, a drugi — nazwa funkcji. Nazwy kolumn można spłaszczyć do pojedynczego ciągu znaków za pomocą list comprehension, co ułatwia dalszą pracę z wynikiem.
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']Używanie własnych funkcji w agg()
Oprócz nazw w postaci ciągów znaków można przekazać do agg() dowolny obiekt wywoływalny języka Python. Funkcja otrzymuje obiekt Series (wartości dla danej kolumny w jednej grupie) i musi zwrócić skalar. Można przekazać funkcję lambda lub funkcję nazwaną. Funkcje własne są bardziej elastyczne, ale wolniejsze od wbudowanych funkcji przekazanych z użyciem nazw, ponieważ nie mogą korzystać z optymalizacji na poziomie 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 120Agregacje nazwane z funkcjami własnymi
Składnia nazwanych agregacji działa również z funkcjami wywoływalnymi, a nie tylko z nazwami zapisanymi jako ciągi znaków. Wystarczy przekazać krotkę (column, function) jako wartość argumentu słowa kluczowego, gdzie funkcja jest dowolnym obiektem wywoływalnym, który przyjmuje Series i zwraca wartość skalarną. Dzięki temu kod pozostaje czytelny nawet wtedy, gdy łączą Państwo funkcje wbudowane z własną 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 40Agregowanie bez wybierania kolumny
Gdy wywołują Państwo agg() na obiekcie GroupBy bez wybierania konkretnej kolumny, Pandas stosuje funkcję do każdej kolumny numerycznej w DataFrame. To szybki sposób na uzyskanie podsumowania wszystkich kolumn numerycznych jednocześnie. Należy pamiętać, że kolumny z nienumerycznymi typami danych są w większości agregacji pomijane bez ostrzeżenia.
# 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Łączenie agg() z reset_index()
Po wywołaniu agg() kolumny grupowania stają się indeksem. Często stosuje się wzorzec polegający na natychmiastowym wywołaniu reset_index(), aby uzyskać płaski DataFrame, w którym klucze grup są zwykłymi kolumnami. Następnie można zmieniać nazwy, sortować i filtrować wynik tak jak każdy inny DataFrame, co ułatwia przekazanie go do kolejnych etapów przetwarzania lub eksport.
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() a transform() i apply()
Ważne jest rozróżnienie trzech metod GroupBy: agg() redukuje każdą grupę do wartości skalarnej, tworząc wynik z mniejszą liczbą wierszy niż oryginał. transform() zwraca tablicę o takim samym kształcie jak dane wejściowe, dzięki czemu można dodać statystyki na poziomie grup jako nowe kolumny. apply() jest najbardziej elastyczna, ale również najwolniejsza; zostanie omówiona w następnej lekcji.
# 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())Praktyczny przykład: podsumowanie sprzedaży
Oto realistyczny przykład obejmujący cały proces: obliczenie tabeli podsumowania sprzedaży zawierającej łączny przychód, średnią wartość zamówienia, liczbę zamówień oraz zakres przychodów dla każdego regionu, z czytelnymi nazwami kolumn i sortowaniem malejąco według łącznego przychodu. Ten wzorzec można bezpośrednio zastosować w procesach analitycznych dotyczących produktu, finansów i marketingu.
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)Szybkie sprawdzenie
Sprawdź swoje zrozumienie metody agg() omówionej w tej lekcji.
Podsumowanie lekcji
W tej lekcji nauczyli się Państwo, jak obliczać wiele agregacji jednocześnie za pomocą agg(), jak używać nazwanych agregacji do tworzenia czytelnych nazw kolumn oraz jak stosować różne funkcje do różnych kolumn za pomocą słownika. Następnie omówimy transform() i filter(), które dodają informacje na poziomie grup z powrotem do oryginalnego DataFrame.
Często zadawane pytania
Czy lekcja „Metoda agg()” jest bezpłatna?
Tak — pełny tekst „Metoda agg()” 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 „Metoda agg()”?
Zastosuj jednocześnie wiele funkcji agregujących za pomocą agg() i przekaż słownik, aby obliczyć różne statystyki dla różnych kolumn. Ć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 3 z 4.
Ile czasu zajmuje lekcja „Metoda agg()”?
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
- Wzorzec Split-Apply-Combine
- GroupBy z jednym i wieloma kluczami
- Metoda agg()
- Transformacja i filtrowanie GroupBy