【毎日Python】Pythonでデータを等間隔のビンに分割する方法|pandas.cut

cut
毎日Python/こつこつPython
import pandas as pd

Pythonで、境界値を指定してビン分割する方法です。
使用するのは、Pythonのpandasライブラリのcutメソッドです。
ビン分割とは、配列の各要素を最小と最大の境界値で区切り、カテゴリ分けする操作のことです。

ser = [11, 46, 65, 34, 25, 12, 35, 79]
pd.cut(ser, 4)

このようなリストを例にとります。
cutの第一引数にリストの変数名、第二引数にビン分割する数を指定します。
実行します。
4つのカテゴリに分けて、ビン分割することができました。
cutメソッドでは、それぞれのビンが同じ間隔で分割されます。
この場合、それぞれのビンの間隔は17となっています。
なお、デフォルトでは、最小値である左側の境界値は含まれず、最大値である右側の境界値は含まれるようになっています。
例えば、11は10.932より大きく、28以下というカテゴリに分割されます。  

pd.cut(a, 4, right=False)

right=Falseを指定すると、左の境界値を含み、右の境界値を含まないようにすることができます。
実行します。
左側も境界値に含み、右側の境界値を含まずにビン分割することができました。

pd.cut(a, [15, 55, 95])

次に、境界値を指定してビン分割してみましょう。
第2引数にリストを指定すると、その値が境界値となります。
実行します。
指定した値を境界値としてビン分割することができました。

pd.cut(a, 4, retbins=True)

それぞれの境界値を、配列で取得することもできます。
引数retbinsにTrueを指定します。
実行します。
境界値も併せて取得することができました。

pd.cut(a, 4, labels=['tiny', 'small', 'medium','big'])

また、ビン分割する値にラベルを指定することもできます。
引数にlabelsで、ラベルにしたい値をリストで指定します。
実行します。
ラベルで表示することができました。

pd.qcut(ser,4).value_counts()
pd.cut(ser,4).value_counts()

なお、同じようにビン分割を行うメソッドで、qcutメソッドがあります。
qcutメソッドは、このようにそれぞれのビンの個数が同じになるように分割されます。
一方、cutメソッドでは、ビンの個数はそれぞれ異なります。

関連メソッド

【毎日Python】Pythonでデータを同じ数でビン分割する方法|pandas.qcut