假设我创建了一些数据,然后创建了不同大小的分档:
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
答案 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
我们自己