我有一个 Pandas 数据框,我正在尝试逐组删除异常值。如果组中的每一行超出列的范围,则将其视为异常值
[group_mean - (group_std_dev * 3), group_mean + (group_std_dev * 3)]
其中 group_mean 是组中列的平均值,group_std_dev 是组中列的标准差。我尝试了以下熊猫链
df.groupby(by='group').apply(lambda x: x[(x['col'].mean() - (x['col'].std() * 3)) < x['col'] < (x['col'].mean() - (x['col'].std() * 3)])
但它似乎没有工作,因为 Pandas 会在 apply 内部进行比较时引发以下错误
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
该错误对我来说似乎没有多大意义,因为比较应该转换为一系列布尔值,然后将其应用于组 x?
但是,仅通过上限或下限进行过滤确实有效,例如
df.groupby(by='group').apply(lambda x: x[(x['col'].mean() - (x['col'].std() * 3)) < x['col'])
但我不确定如何将这些链接在一起。
有没有人对如何简单而干净地实现这一点有任何想法?这对我来说似乎并不难,但这里的其他帖子并没有产生令人满意或有效的答案。
忽然笑
相关分类