熊猫 - 用自定义百分位切割记录

时间:2018-03-23 21:05:39

标签: python pandas dataframe

我有一个带有一系列连续变量的pandas数据帧。我需要将它们转换为3个区间,这样第一个区域包含的值<20%,第二个区间在20到80百分位之间,最后一个区域包含> 80%。

我试图通过首先获得这种百分位数的bin边界然后使用pandas cut函数来实现它。问题是我得到一个奇怪的结果,只得到编码的中间bin。请参阅以下内容:

test = [x for x in range(0,100)]
a = pd.DataFrame(test)

np.percentile(a, [20, 80])
Out[52]: array([ 19.8,  79.2])

pd.cut(a[0], np.percentile(a[0], [20, 80]))

...
15             NaN
16             NaN
17             NaN
18             NaN
19             NaN
20    (19.8, 79.2]
21    (19.8, 79.2]
22    (19.8, 79.2]
...
78    (19.8, 79.2]
79    (19.8, 79.2]
80             NaN

为什么会这样?我虽然大熊猫切割需要你提供你想要的垃圾箱的边界。提供2个边界我应该得到3个箱子,但看起来它不会这样工作。

1 个答案:

答案 0 :(得分:3)

如果您需要3个垃圾箱,那么您需要4个休息时间。

test = [x for x in range(0,100)]
a = pd.DataFrame(test)
np.percentile(a, [0,20, 80,100])
Out[527]: array([ 0. , 19.8, 79.2, 99. ])
pd.cut(a[0], np.percentile(a[0], [0,20, 80,100]))

另外,在大熊猫中我们有qcut,这意味着你不需要从numpy获取bin

pd.qcut(a[0],[0,0.2,0.8,1])