Pandy: jak grupować według zakresu wartości
Możesz użyć poniższej składni, aby użyć funkcji groupby() w pandach, aby pogrupować kolumnę według zakresu wartości przed wykonaniem agregacji:
df. groupby (pd. cut (df[' my_column '], [0, 25, 50, 75, 100])). sum ()
Ten konkretny przykład pogrupuje wiersze DataFrame według następującego zakresu wartości w kolumnie o nazwie my_column :
- (0,25]
- (25, 50]
- (50, 75]
- (75, 100]
Następnie obliczy sumę wartości we wszystkich kolumnach DataFrame, używając tych zakresów wartości jako grup.
Poniższy przykład pokazuje, jak zastosować tę składnię w praktyce.
Przykład: Jak grupować według zakresu wartości w Pandach
Załóżmy, że mamy następującą ramkę danych pand, która zawiera informacje o rozmiarach różnych sklepów detalicznych i ich łącznej sprzedaży:
import pandas as pd
#createDataFrame
df = pd. DataFrame ({' store_size ': [14, 25, 26, 29, 45, 58, 67, 81, 90, 98],
' sales ': [15, 18, 24, 25, 20, 35, 34, 49, 44, 49]})
#view DataFrame
print (df)
store_size sales
0 14 15
1 25 18
2 26 24
3 29 25
4 45 20
5 58 35
6 67 34
7 81 49
8 90 44
9 98 49
Możemy użyć poniższej składni, aby pogrupować ramkę DataFrame na podstawie określonych zakresów kolumny store_size , a następnie obliczyć sumę wszystkich pozostałych kolumn w ramce DataFrame, używając zakresów jako grup:
#group by ranges of store_size and calculate sum of all columns
df. groupby (pd. cut (df[' store_size '], [0, 25, 50, 75, 100])). sum ()
store_size sales
store_size
(0.25] 39 33
(25, 50] 100 69
(50, 75] 125 69
(75, 100] 269 142
Z wyniku możemy zobaczyć:
- W przypadku wierszy z wartością store_size z zakresu od 0 do 25 suma store_size wynosi 39 , a suma sprzedaży wynosi 33 .
- W przypadku wierszy z wartością store_size z zakresu od 25 do 50 suma store_size wynosi 100 , a suma sprzedaży wynosi 69 .
I tak dalej.
Jeśli chcesz, możesz również obliczyć sumę sprzedaży dla każdego zakresu store_size :
#group by ranges of store_size and calculate sum of sales
df. groupby (pd. cut (df[' store_size '], [0, 25, 50, 75, 100]))[' sales ']. sum ()
store_size
(0.25] 33
(25, 50] 69
(50, 75] 69
(75, 100] 142
Name: sales, dtype: int64
Możesz także użyć funkcji NumPy arange(), aby podzielić zmienną na zakresy bez ręcznego określania każdego punktu cięcia:
import numpy as np #group by ranges of store_size and calculate sum of sales df. groupby (pd. cut (df[' store_size '], np. arange (0, 101, 25)))[' sales ']. sum () store_size (0.25] 33 (25, 50] 69 (50, 75] 69 (75, 100] 142 Name: sales, dtype: int64
Należy pamiętać, że te wyniki są zgodne z poprzednim przykładem.
Uwaga : pełną dokumentację funkcji NumPy arange() można znaleźć tutaj .
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w pandach:
Pandy: Jak liczyć unikalne wartości za pomocą groupby
Pandy: Jak obliczyć średnią i normę kolumny w groupby
Pandy: Jak używać as_index w groupby