我将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/