大熊猫在系列上使用qcut,其值小于分位数

时间:2017-05-18 14:33:03

标签: pandas quantile

我需要应用qcut的数千个系列(DataFrame的行)。定期会有一系列(行)的值小于所需的分位数(例如,1值对2分位数):

>>> s = pd.Series([5, np.nan, np.nan])

当我将.quantile()应用于它时,它可以分成2个分位数(具有相同的边界值)没有问题

>>> s.quantile([0.5, 1])
0.5    5.0
1.0    5.0
dtype: float64

但是当我使用整数值对.qcut()应用分位数时会抛出错误:

>>> pd.qcut(s, 2)
...
ValueError: Bin edges must be unique: array([ 5.,  5.,  5.]).
You can drop duplicate edges by setting the 'duplicates' kwarg

即使我设置了duplicates参数,它仍然会失败:

>>> pd.qcut(s, 2, duplicates='drop')
....
IndexError: index 0 is out of bounds for axis 0 with size 0

如何使这项工作? (并且等效地,pd.qcut(s, [0, 0.5, 1], duplicates='drop')也不起作用。)

所需的输出是将5.0分配给单个bin并保留NaN

0     (4.999, 5.000]
1                NaN
2                NaN

2 个答案:

答案 0 :(得分:2)

好的,这是一个可能对您有用的解决方法。

pd.qcut(s,len(s.dropna()),duplicates='drop')
Out[655]: 
0    (4.999, 5.0]
1             NaN
2             NaN
dtype: category
Categories (1, interval[float64]): [(4.999, 5.0]]

答案 1 :(得分:0)

使用python 3.5而不是python 2.7。 这对我有用