首页 > 解决方案 > 标记数据框中的异常值,在熊猫中创建一个新列

问题描述

我看到了这个问题,想稍微更新一下。

data = {'Group':['A', 'A', 'A'], 'Age':[18, 200, 17]} 
df = pd.DataFrame(data) 

我想创建一个新列“异常值”,其中异常值将根据 3 个标准偏差标记为真或假。

我想要的输出

data = {'Group':['A', 'A', 'A'], 'Age':[18, 200, 17], 'Outlier':['False', 'True', 'False']} 
df = pd.DataFrame(data) 
df

标签: pythonpandasoutliers

解决方案


尝试使用groupbytransform

zscores = df.groupby('Group').transform(lambda x: (x - x.mean()) / x.std())
df["Outlier"] = zscores.abs()>3

>>> df
  Group  Age  Outlier
0     A   18    False
1     A  200    False
2     A   17    False

要获得不考虑组的异常值,请使用:

zscores = (df["Age"]-df["Age"].mean())/df["Age"].std()
df["Outlier"] = zscores.abs()>3

推荐阅读