我使用numpy直方图和数字化函数创建了一个分布。
_, bins = np.histogram(x, bins=bins)
arr = np.digitize(x, bins) - 1
x = bins[arr[:]]
或者可能:
x = pandas.cut(x, bins=bins)
然而,由于分布非常偏斜,即使在去除异常值之后,仍有许多箱子几乎没有观察到。我想合并箱子,有点类似于:
该过程可能涉及pandas groupby,然后将小于n
的组大小合并到其相邻值。有没有办法在pandas / numpy中实现这个目标?
答案 0 :(得分:1)
正如所承诺的那样,我在physt中实现了一些东西,版本0.3.5。欢迎您使用它。
请参阅http://nbviewer.jupyter.org/github/janpipek/physt/blob/master/doc/Binning2.ipynb#Merging-bins,尤其是http://nbviewer.jupyter.org/github/janpipek/physt/blob/master/doc/Binning2.ipynb#By-min-frequency
在您的情况下,工作流程将是这样的:
import physt
histogram = physt.h1(x, bins=bins)
histogram.merge_bins(min_frequency=n)
bins = histogram.numpy_bins
请注意,代码处于alpha阶段,并且每个bin都不包含超过所需的最小值(为了保留较高的窄容器)。仍然在寻找最好的算法。