四舍五入到最近的Bin

时间:2017-11-16 19:26:01

标签: python pandas numpy

我有一个收入费用列表,我需要将向下舍入到最近的bin。

例如,如果销售的产品成本如下:

import numpy as np
bins = np.array([9.95,19.95,79.95])

我有几个这样的指控:

x = np.array([6.68, 9.20, 12.5, 18.75, 21.59])

我跟着this example,这绝对是最接近的解决方案:

y = np.take(bins,np.digitize(x,bins))

我认为将right=参数保留为np.digitize的默认值可以完成我需要的操作,但结果仍然是四舍五入的:

In [10]: y
Out[10]: array([  9.95,   9.95,  19.95,  19.95,  79.95])

在我的特定情况下,我需要将向上舍入到最近的bin。例如,12.50美元的费用仅比$ 9.95低2.55美元,但所选择的选项19.95美元则为7.45美元。

修改

虽然我链接的解决方案中的一个答案可以向上/向下舍入,但似乎该方法可以返回不一致的结果,因此这个新帖子。

1 个答案:

答案 0 :(得分:6)

如果要舍入到某些值,则需要在其中点进行分割。像这样:

import numpy as np

bins = np.array([9.95,19.95,79.95])
centers = (bins[1:]+bins[:-1])/2

x = np.array([6.68, 9.20, 12.5, 18.75, 21.59])
res = bins[np.digitize(x, centers)]

给出

array([  9.95,   9.95,   9.95,  19.95,  19.95])