GroupBy i agregacja
df.groupby(), agg(), transform(), apply() oraz nazwane agregacje z Named Aggregation.
GroupBy i agregacja to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 1 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 Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Schemat split-apply-combine
GroupBy realizuje schemat split-apply-combine: dzieli wiersze na grupy według klucza, stosuje funkcję do każdej grupy, a następnie łączy wyniki w jedną ramkę danych. Stanowi podstawę większości podsumowań analitycznych.
import pandas as pd
df = pd.DataFrame({
"dept": ["A", "A", "B", "B", "B"],
"salary": [50, 70, 40, 60, 80],
})Podstawy groupby
df.groupby("col") tworzy pogrupowany obiekt. Połączenie go z agregacją, taką jak .mean(), oblicza jedną wartość dla każdej grupy.
print(df.groupby("dept")["salary"].mean())
# dept
# A 60.0
# B 60.0Wiele agregacji
Wywołaj kilka funkcji redukujących jednocześnie za pomocą .agg([...]), aby otrzymać osobną kolumnę dla każdej funkcji.
print(df.groupby("dept")["salary"].agg(["mean", "min", "max", "count"]))Słownik agregacji dla poszczególnych kolumn
Przekaż słownik do .agg, aby zastosować różne funkcje do różnych kolumn.
df["bonus"] = [5, 7, 4, 6, 8]
out = df.groupby("dept").agg({"salary": "mean", "bonus": "sum"})
print(out)Agregacja nazwana
Agregacja nazwana nadaje kolumnom wynikowym czytelne nazwy za pomocą składni pd.NamedAgg. Pozwala to uniknąć niejasnych wielopoziomowych nagłówków kolumn.
out = df.groupby("dept").agg(
avg_salary=("salary", "mean"),
total_bonus=("bonus", "sum"),
)
print(out)Grupowanie według wielu kluczy
Przekaż listę kolumn, aby jednocześnie grupować dane według kilku kluczy i otrzymać hierarchiczny wynik (MultiIndex).
df["level"] = ["jr", "sr", "jr", "sr", "sr"]
print(df.groupby(["dept", "level"])["salary"].mean())transform: wynik o tym samym kształcie
.transform() zwraca wynik dopasowany do ORYGINALNYCH wierszy, a nie jeden wiersz na grupę. Doskonale nadaje się do dodawania statystyki grupy z powrotem jako nowej kolumny.
df["dept_avg"] = df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "dept_avg"]])transform do normalizacji
Ponieważ transform rozsyła wynik z powrotem do każdego wiersza, można normalizować dane wewnątrz grup, na przykład odejmując średnią grupy.
df["centered"] = df["salary"] - df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "centered"]])apply do niestandardowej logiki
.apply() przekazuje każdą grupę (jako pod-DataFrame) do określonej przez użytkownika funkcji. Używaj go do logiki, której nie da się wyrazić za pomocą wbudowanych agregacji, na przykład do zwracania N najlepszych wierszy z każdej grupy.
top = df.groupby("dept").apply(lambda g: g.nlargest(1, "salary"))
print(top[["dept", "salary"]])agg a transform i apply
agg redukuje każdą grupę do jednej wartości. transform zwraca jedną wartość dla każdego oryginalnego wiersza. apply to elastyczne, ale wolniejsze rozwiązanie ogólnego zastosowania. Dla czytelności i wydajności wybieraj rozwiązanie najbardziej dopasowane do zadania.
Usuwanie grupowania za pomocą reset_index
Wyniki GroupBy umieszczają klucze w indeksie. Wywołaj .reset_index(), aby z powrotem zamienić je w zwykłe kolumny, których oczekuje większość kolejnych operacji.
flat = df.groupby("dept")["salary"].mean().reset_index()
print(flat)
# dept salary
# 0 A 60.0
# 1 B 60.0Szybki test
Sprawdź swoje rozumienie groupby.
Podsumowanie
Najważniejsze informacje o GroupBy:
- Schemat split-apply-combine za pomocą
df.groupby("col") .agg([...])oraz agregacja za pomocą słownika i agregacja nazwana do obliczania wielu statystyk.transform()zwraca wyniki o kształcie oryginalnych danych.apply()do dowolnej logiki wykonywanej dla każdej grupy- Zawsze używaj
.reset_index(), aby spłaszczyć klucze grup z powrotem do kolumn
Często zadawane pytania
Czy lekcja „GroupBy i agregacja” jest bezpłatna?
Tak — pełny tekst „GroupBy i agregacja” 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 Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „GroupBy i agregacja”?
df.groupby(), agg(), transform(), apply() oraz nazwane agregacje z Named Aggregation. Ćwiczysz Learn AI with Python 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ąć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python 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 1 z 4.
Ile czasu zajmuje lekcja „GroupBy i agregacja”?
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 Learn AI with Python?
Tak. Każda lekcja Learn AI with Python 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
- GroupBy i agregacja
- Tabele przestawne i tabele krzyżowe
- Zaawansowane scalanie i łączenie
- Szeregi czasowe w Pandas