Pandas合并区间

4
我使用numpy的histogram和digitize函数创建了一个分布。
_, bins = np.histogram(x, bins=bins)
arr = np.digitize(x, bins) - 1
x = bins[arr[:]]

或者可能是:
x = pandas.cut(x, bins=bins)

然而,由于分布非常倾斜,即使在去除异常值后,许多区间的观察量也很少。我想合并一些区间,有点类似于:如何在R中合并区间。该过程可能涉及到pandas的groupby,然后将大小小于n的组合并到其相邻值中。是否有一种方法可以在pandas/numpy中实现这个过程?

你能否使用pd.cut - Jon Clements
@JonClements 我似乎不明白那怎么能在这种情况下有所帮助。 - hangc
是的,我不确定你是否可以只使用“cut”并提供它所需的箱数,以便获得自动分布...但如果您必须定义箱,则无法使用该方法... - Jon Clements
1
有趣的问题。我会考虑在我的直方图库physt中包含这样的功能 - https://github.com/janpipek/physt(但可能要等到你找到答案之后才能实现;-) - honza_p
1个回答

1

正如承诺的那样,我在physt 0.3.5版本中实现了一些功能。欢迎您使用它。

请参见http://nbviewer.jupyter.org/github/janpipek/physt/blob/master/doc/Binning2.ipynb#Merging-binshttp://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都包含超过所需的最小值(为了保留高瘦的bin)。仍在寻找最佳算法。

会去看一下! - hangc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接