パンダ: 値の範囲でグループ化する方法
次の構文を使用して、pandas のgroupby()関数を使用して、集計を実行する前に値の範囲で列をグループ化できます。
df. groupby (pd. cut (df[' my_column '], [0, 25, 50, 75, 100])). sum ()
この特定の例では、 my_columnという列の次の値の範囲に従って DataFrame の行をグループ化します。
- (0.25]
- (25、50]
- (50、75]
- (75、100]
次に、これらの値の範囲をグループとして使用して、DataFrame のすべての列の値の合計を計算します。
次の例は、この構文を実際に使用する方法を示しています。
例: Pandas で値の範囲でグループ化する方法
さまざまな小売店の規模とその総売上高に関する情報を含む次のパンダ データフレームがあると仮定します。
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
次の構文を使用して、 store_size列の特定の範囲に基づいて DataFrame をグループ化し、その範囲をグループとして使用して DataFrame 内の他のすべての列の合計を計算できます。
#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
結果から次のことがわかります。
- store_size 値が 0 ~ 25 の行の場合、store_size の合計は39 、 sales の合計は33です。
- store_size 値が 25 ~ 50 の行の場合、store_size の合計は100で、 sales の合計は69になります。
等々。
必要に応じて、各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
NumPy arange()関数を使用すると、各カットポイントを手動で指定せずに変数を範囲に分割することもできます。
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
これらの結果は前の例と一致することに注意してください。
注: NumPy arange()関数の完全なドキュメントはここで見つけることができます。
追加リソース
次のチュートリアルでは、パンダで他の一般的なタスクを実行する方法を説明します。
パンダ: groupby を使用して一意の値を数える方法
パンダ: groupby の列の平均とノルムを計算する方法
パンダ: groupby で as_index を使用する方法