如何在数据框中找到组内的异常值
How to find outliers within groups in a dataframe
我有一个如下所示的 df:
Group.
Score.
red
34
blue
42
green
1000
green
34
blue
34
red
42
我想在此添加一列,用于指定该值是否为离群值。如果没有组,那么我会使用类似的东西:
df['outliers'] = df[df[col] > df[col].mean() + 3 * df[col].std()]
但是我该怎么做才能在组中呢?
您可以使用 GroupBy.transform
:
df["is_outlier"] = df.groupby("Group.").transform(lambda x: (x - x.mean()).abs() > 3*x.std())
在每组中,取元素与组均值的距离,看其绝对值是否超过组标准差的3倍
我有一个如下所示的 df:
Group. | Score. |
---|---|
red | 34 |
blue | 42 |
green | 1000 |
green | 34 |
blue | 34 |
red | 42 |
我想在此添加一列,用于指定该值是否为离群值。如果没有组,那么我会使用类似的东西:
df['outliers'] = df[df[col] > df[col].mean() + 3 * df[col].std()]
但是我该怎么做才能在组中呢?
您可以使用 GroupBy.transform
:
df["is_outlier"] = df.groupby("Group.").transform(lambda x: (x - x.mean()).abs() > 3*x.std())
在每组中,取元素与组均值的距离,看其绝对值是否超过组标准差的3倍