我将qcut应用于groupby结果,以下是我的问题的简化版本:

a = pd.DataFrame({'A':[1,1,1,1,2,2,2,2],
                  'B': [0,0,0,0,2,3,7,6]})
a.groupby(['A'])['B'].apply(lambda x: pd.qcut(x, 2))

问题是,某些小组提出了ValueError,因为
raise ValueError('Bin edges must be unique: %s' % repr(bins))
ValueError: Bin edges must be unique: array([ 0.,  0.,  0.])

我要实现的是,如果qcut失败,则跳过(或将0作为结果传递)并继续进行下一组的qcut。
有什么建议?

最佳答案

@JohnE的答案几乎没有变化,可以让我们保留apply语法。

def try_qcut(x,n):
    try:
        return pd.qcut(x,n)
    except ValueError:
        return x*np.nan

a.groupby('A')['B'].apply(lambda x: try_qcut(x, 2))

0         NaN
1         NaN
2         NaN
3         NaN
4    [2, 4.5]
5    [2, 4.5]
6    (4.5, 7]
7    (4.5, 7]
Name: B, dtype: object

关于pandas - 如果失败,是否继续对下一个groupby组执行qcut?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40581769/

10-10 13:36