Grupowanie, agregowanie, transformowanie danych jest to jedno z zadań które wykonuje bardzo często, każdy analityk danych. Nie jest więc zaskoczeniem, że i Pandas przychodzi tutaj z zestawem prostych, lecz skutecznych funkcji, takich jak pandas group by, sprawiając że jest to łatwe i przyjemne. W tej i kilku kolejnych lekcjach, pokaże najważniejsze z nich.

Dla zobrazowania działania funkcji group by, posłużymy się zbiorem danych films, który znamy z poprzednich lekcji.

films = pd.read_csv('https://analityk.edu.pl/wp-content/uploads/2020/12/film.csv', 
                    sep=';', 
                    encoding = "ISO-8859-1",
                    skiprows=[1],
                    dtype={'Length':'float64', 'Popularity':'float64'},
                    usecols=['Year','Length','Title','Subject','Popularity','Awards'],
                    converters={'Awards':lambda x: True if x == 'Yes' else False})

Pandas Group by – prosty przykład

Powiedzmy że chcemy poznać ilość filmów w naszym DataFrame, dla poszczególnych lat. Użyjemy funkcji group by, która przyjmuje jako parametr nazwę kolumny po której chcemy dokonać grupowania oraz funkcji count() która zliczy nam rekordy:

films.groupby('Year').count()

pandas group by

Tym samym zliczyliśmy ile jest wartości w każdej kolumnie dla danego roku (innych niż NaN).

Bez problemu, możemy skupić się na jednej kolumnie, wykonać operację na przykład mean() i policzyć średnią popularność filmu:

films.groupby('Year').Popularity.mean()

pandas group by

Pandas Group by, dla kilku kolumn

Grupowanie może odbyć się również po większej ilości kolumn. Możemy policzyć średnią długość trwania filmu dla danego roku, dodatkowo w rozbiciu na np kategorię filmu. W tym celu do naszej funkcji group by, podamy 2 parametry:

films.groupby(['Year','Subject']).Length.mean()

python group by

Pandas Group by – funkcja agg

Powyżej zobaczyliśmy, że grupowanie dla prostych operacji jest bardzo proste w Pandas. A co jeżeli chcemy dla danej grupy wykonać kilka obliczeń? Np minimalną oraz maksymalną długość filmu oraz dodatkowo minimalną oraz maksymalną popularność filmu? Do tego celu użyjemy funcji agg, która znacząco zwiększa nasze możliwości.

Najpierw zobaczmy jak ona wygląda:

films.groupby('Year').agg({'Popularity':['min','max'], 'Length':['min','max']})

pandas agg

Funkcję możemy wywołać na kilka sposobów. W powyższym przykładnie wywołujemy ją ze słownikiem. Jak klucz podajemy kolumnę, a jako wartość, listę operacji którą chcemy wykonać. Innym sposobem wywołania funkcji agg, jest bardzo wygodny sposób, który pozwala nam od razu nadać nazwy naszym kolumnom:

films.groupby('Year').agg(mininalna_popularnosc=('Popularity','min'),
                          maksymalna_popularnosc=('Popularity','max'))

pandas funkcja agg

Filtrowanie

Tak jak pokazłem powyżej, agregowanie w Pandas za pomocą funkcji group by jest proste. Magii brak, i po odrobinie ćwiczeń będzie Ci to bardzo dobrze wychodzić. To o czym jeszcze nie wspomniałem to o prostej metodzie na wyfiltrowanie części danych przed ich zgrupowaniem. Chociaż się możesz już domyślać jak to zrobić 🙂

Powiedzmy że chcemy policzyć średnią długość trwania filmu, dla filmów z okresu 1980 – 1990.

Na początku zamienimy rok na liczby, ponieważ zapomniałem tego zrobić we wcześniejszych lekcjach, a następnie użyjemy znanych i lubianych nawiasów [], aby wyfiltrować potrzebne dla nas dane.

films['Year'] = pd.to_numeric(films.Year)

films[(films['Year'] >- 1980) & (films['Year'] <= 1990)].groupby('Year').Length.mean()

python pandas group by

Proste? Proste!

Podsumowanie

Funkcja group by, jest czymś stosowanym bardzo często. Agg wymaga troszeczkę wprawy, ale szybko da się do jego składni przyzwyczaić. W kolejnych lekcjach zobaczymy dalsze transformacje, ale zanim tam przejdziemy, zapraszam do ćwiczeń.

Ćwiczenia

  1. policz średni czas trwania filmu, w każdym roku, po 1980

  2. policz ilość filmów, na dany roku, w zależności od kategorii filmu

Spis treści Pandas Tutorial / Kurs

  1. Pandas – Intro
  2. Pandas – przygotowanie środowiska pracy
  3. Pandas – tworzenie prostego DataFrame
  4. Pandas – odczyt i zapis do pliku
  5. Pandas – podstawowe informacje o DataFrame
  6. Pandas – indeksy oraz funkcja loc
  7. Pandas – maski
  8. Pandas – modyfikacje kolumn
  9. Pandas – funkcja apply
  10. Pandas – typy danych
  11. Pandas – grupowanie z groupby
  12. Pandas – unstack oraz tabele przestawne
  13. Pandas – łączenie zbiorów danych
  14. Pandas – SQL i bazy danych

Facebook Comments