Python:检查值属于哪个bin

Python:检查值属于哪个bin,python,range,binning,Python,Range,Binning,我有一个值列表和一个箱子边列表。现在我需要检查它们所属的bin的所有值。有没有比遍历值然后遍历存储箱并检查值是否属于当前存储箱更符合Python的方法,如: my_list = [3,2,56,4,32,4,7,88,4,3,4] bins = [0,20,40,60,80,100] for i in my_list: for j in range(len(bins)): if bins(j) < i < bins(j+1): DO

我有一个值列表和一个箱子边列表。现在我需要检查它们所属的bin的所有值。有没有比遍历值然后遍历存储箱并检查值是否属于当前存储箱更符合Python的方法,如:

my_list = [3,2,56,4,32,4,7,88,4,3,4]
bins = [0,20,40,60,80,100]

for i in my_list:
    for j in range(len(bins)):
        if bins(j) < i < bins(j+1):
            DO SOMETHING
my_list=[3,2,56,4,32,4,7,88,4,3,4]
垃圾箱=[0,20,40,60,80100]
对于我的_列表中的i:
对于范围内的j(透镜(箱)):
如果料仓(j)
我觉得这个不太好看。
谢谢

也许这会帮助你走上正轨:

>>> import itertools
>>> my_list = [3,2,56,4,32,4,7,88,4,3,4]
>>> for k, g in itertools.groupby(sorted(my_list), lambda x: x // 20 * 20):
...     print k, list(g)
... 
0 [2, 3, 3, 4, 4, 4, 4, 7]
20 [32]
40 [56]
80 [88]

首先,当值等于bin边界时,代码将失败--

改变

if bins(j) < i < bins(j+1):
bisect.bisect\u right


取决于当某个值位于存储单元边界上时,您是选择较高的存储单元还是较低的存储单元。

可能太晚了,但为了便于将来参考,numpy有一个函数可以做到这一点:

结果是一个索引数组,该数组对应于“我的_”列表中的每个元素也属于的bin中的bin。 请注意,该函数还将显示位于第一个和最后一个箱子边缘之外的箱子值:

>>> my_list = [-5,200]
>>> np.digitize(my_list,bins)
array([0, 6])
熊猫也有类似的东西:


首先对列表进行排序。我认为
bisect
的参数是相反的。另外:
bisect
bisect\u right
是相同的函数<代码>左对分
用于更改包含边界的箱子
>>> my_list = [3,2,56,4,32,4,7,88,4,3,4]
>>> bins = [0,20,40,60,80,100]
>>> np.digitize(my_list,bins)
array([1, 1, 3, 1, 2, 1, 1, 5, 1, 1, 1])
>>> my_list = [-5,200]
>>> np.digitize(my_list,bins)
array([0, 6])
>>> pd.cut(my_list, bins)
Categorical: 
array(['(0, 20]', '(0, 20]', '(40, 60]', '(0, 20]', '(20, 40]', '(0, 20]',
       '(0, 20]', '(80, 100]', '(0, 20]', '(0, 20]', '(0, 20]'], dtype=object)
Levels (5): Index(['(0, 20]', '(20, 40]', '(40, 60]', '(60, 80]',
                   '(80, 100]'], dtype=object)