Python 2.7 - 将系列拆分为具有相同项目数的间隔(与 pandas.cut() 类似)

我有以下系列:


0         79.0

1        220.0

2        185.0

3        199.0

4        226.0

5        141.0

6        341.0

7        151.0

8         57.0

9        313.0

10       273.0

11       113.0

12       328.0

如果我使用pandas.cut()它,这就是我得到的:


    series  equal_intvls

0   79.0    (0.979, 306.1]

1   220.0   (0.979, 306.1]

2   185.0   (0.979, 306.1]

3   199.0   (0.979, 306.1]

4   226.0   (0.979, 306.1]

5   141.0   (0.979, 306.1]

6   341.0   (306.1, 608.2]

7   151.0   (0.979, 306.1]

8   57.0    (0.979, 306.1]

9   313.0   (306.1, 608.2]

10  273.0   (0.979, 306.1]

11  113.0   (0.979, 306.1]

12  328.0   (306.1, 608.2]

pandas.cut() 给了我一系列长度相同(最大值 - 最小值)的间隔,间隔的长度是 2,但是从间隔的起点到终点,每个间隔内有几个数字可能不每个间隔都相同。


如果我使用pandas.cut()我得到相同长度的区间,但我怎么能把这个系列分成每个区间包含相同数量元素的区间?


我想获得的是一个包含这些间隔的新列,其中包含相同数量的元素。以以下数组为例:


[1, 7, 7, 4, 6, 3]

我想获得的是这一系列具有相同数量项目的间隔:


[(0.999, 3.667] ,(3.667, 6.333] , (6.333, 7.0]]



(0.999, 3.667] - There are 2 values in this imterval: (1, 3)

(3.667, 6.333] - There are 2 values in this interval (4, 6)

(6.333, 7.0] - And again, 2 values within this interval (7, 7)

我想以类似系列的形式获取间隔,以便我可以将其作为新列输入到 y 原始 df 中。


我已经尝试过np.split,np.array_split但没有成功,我还访问了本网站上的一些其他帖子,这些帖子与我想要的类似,但似乎并不适合我的情况。请帮忙。


获得这些间隔的最佳方法是什么?


绝地无双
浏览 169回答 1
1回答

慕斯709654

我认为您正在寻找qcut:>>> >>> pd.qcut(pd.Series([1, 7, 7, 4, 6, 3]),3)0&nbsp; &nbsp; (0.999, 3.667]1&nbsp; &nbsp; &nbsp; (6.333, 7.0]2&nbsp; &nbsp; &nbsp; (6.333, 7.0]3&nbsp; &nbsp; (3.667, 6.333]4&nbsp; &nbsp; (3.667, 6.333]5&nbsp; &nbsp; (0.999, 3.667]dtype: categoryCategories (3, interval[float64]): [(0.999, 3.667] < (3.667, 6.333] < (6.333, 7.0]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python