Pandy: jak grupować i agregować w wielu kolumnach
Często możesz chcieć pogrupować i zagregować wiele kolumn ramki danych pand.
Na szczęście można to łatwo zrobić, korzystając z funkcji pandy .groupby() i .agg() .
W tym samouczku wyjaśniono kilka przykładów praktycznego wykorzystania tych funkcji.
Przykład 1: Pogrupuj według dwóch kolumn i znajdź średnią
Załóżmy, że mamy następującą ramkę DataFrame pand:
import pandas as pd #createDataFrame df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'], 'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'], 'assists': [5, 7, 7, 8, 5, 7, 6, 9], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]}) #view DataFrame print (df) team position assists rebounds 0 AG 5 11 1 BG 7 8 2 BF 7 10 3 BG 8 6 4 BF 5 6 5 MF 7 9 6 MC 6 6 7 MC 9 10
Poniższy kod pokazuje, jak grupować według kolumn „zespół” i „pozycja” i znajdować średnie podania:
df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index () team position assists mean 0 A G 5.0 1 B F 6.0 2 B G 7.5 3 M C 7.5 4M F 7.0
Dane wyjściowe mówią nam:
- Średnia asyst zawodników na pozycji G drużyny A wynosi 5,0 .
- Średnia asyst zawodników na pozycji F w drużynie B wynosi 6,0 .
- Średnia asyst zawodników na pozycji G drużyny B wynosi 7,5 .
I tak dalej.
Możemy również użyć poniższego kodu, aby zmienić nazwy kolumn wynikowej ramki DataFrame:
#group by team and position and find mean assists new = df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index () #rename columns new.columns = ['team', 'pos', 'mean_assists'] #view DataFrame print (new) team pos mean_assists 0 A G 5.0 1 B F 6.0 2 B G 7.5 3 M C 7.5 4M F 7.0
Przykład 2: Grupuj według dwóch kolumn i znajdź wiele statystyk
Załóżmy, że używamy tej samej ramki DataFrame pand, co w poprzednim przykładzie:
import pandas as pd #createDataFrame df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'], 'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'], 'assists': [5, 7, 7, 8, 5, 7, 6, 9], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})
Poniższy kod pokazuje, jak znaleźć medianę i maksymalną liczbę zbiórek, pogrupowanych w kolumnach „zespół” i „pozycja”:
df. groupby (['team', 'position']). agg ({'rebounds': ['median', 'max']}). reset_index () team position rebounds median max 0 A G 11 11 1 B F 8 10 2 B G 7 8 3 M C 8 10 4 M F 9 9
Dane wyjściowe mówią nam:
- Mediana zbiórek zawodników na pozycji G w drużynie A wynosi 11 .
- Maksymalna liczba zbiórek zawodników znajdujących się na pozycji G drużyny A wynosi 11 .
- Średnia zbiórek zawodników na pozycji F drużyny B wynosi 8 .
- Maksymalna liczba zbiórek zawodników znajdujących się na pozycji F drużyny B wynosi 10 .
I tak dalej.
Dodatkowe zasoby
Jak filtrować ramkę danych Pandas pod wieloma warunkami
Jak policzyć brakujące wartości w Pandas DataFrame
Jak układać wiele ramek danych Pand