我看到了 question 我想稍微更新一下。
data = {'Group':['A', 'A', 'A'], 'Age':[18, 200, 17]} df = pd.DataFrame(data)
我想创建一个新的列“Outlier”,其中Outlier将根据3个标准差标记为true或false。
我想要的产量
data = {'Group':['A', 'A', 'A'], 'Age':[18, 200, 17], 'Outlier':['False', 'True', 'False']} df = pd.DataFrame(data) df
试试看 groupby 和 transform :
groupby
transform
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