シリーズと一連のビンを取り、基本的に最も近いビンに切り上げることができる関数が必要です。例えば:
my_series = [ 1, 1.5, 2, 2.3, 2.6, 3]
def my_function(my_series, bins):
...
my_function(my_series, bins=[1,2,3])
> [1,2,2,3,3,3]
これは、 Numpy の Digitizeが意図していることに非常に近いようですが、間違った値 (間違った値にはアスタリスク) が生成されます。
np.digitize(my_series, bins= [1,2,3], right=False)
> [1, 1*, 2, 2*, 2*, 3]
それが間違っている理由は、ドキュメントから明らかです。
i が返す各インデックスは、bins が単調増加の場合はbins[i-1] <= x < bins[i] 、bins が単調減少の場合はbins[i-1] > x >= bins[i]となります。x の値がビンの境界を超えている場合、0 または len(bins) が適切に返されます。right が True の場合、インデックス i が bins[i-1] < x <= bins[i] または bins[i-1] >= x > bins[i]``ビンがそれぞれ単調に増加または減少している場合。
値を減らして入力し、「右」をTrueに設定すると、希望するものに少し近づくことができます...
np.digitize(my_series, bins= [3,2,1], right=True)
> [3, 2, 2, 1, 1, 1]
しかし、基本的に最も低い番号の割り当て (1) と最も高い番号の割り当て (3) を逆にする方法を考えなければなりません。ビンが3つしかない場合は簡単ですが、ビンの数が長くなると面倒になります..これをすべて行うには、よりエレガントな方法が必要です。