分箱然后以最少的观察数量组合箱子?

时间:2016-07-26 13:18:51

标签: python performance numpy pandas binning

假设我创建了一些数据,然后创建了不同大小的分档:

from __future__ import division
x = np.random.rand(1,20)
new, = np.digitize(x,np.arange(1,x.shape[1]+1)/100)
new_series = pd.Series(new)
print(new_series.value_counts())

揭示了:

20 17
16 1
4  1
2  1
dtype: int64

我基本上想要转换基础数据,如果我设置每个bin至少2个的最小阈值,那么new_series.value_counts()就是这样:

20 17
16 3
dtype: int64

1 个答案:

答案 0 :(得分:2)

<强>编辑:

x = np.random.rand(1,100)
bins = np.arange(1,x.shape[1]+1)/100

new = np.digitize(x,bins)
n = new.copy()[0] # this will hold the the result

threshold = 2

for i in np.unique(n):
    if sum(n == i) <= threshold:
        n[n == i] += 1

n.clip(0, bins.size) # avoid adding beyond the last bin
n = n.reshape(1,-1)

这可以多次移动计数,直到垃圾箱充满。

不是使用np.digitize,而是使用np.histogram可能更简单,因为它会直接为您提供计数,因此我们不需要sum我们自己