【问题标题】:Flagging outliers in dataframe, creating a new column in pandas标记数据框中的异常值,在熊猫中创建一个新列
【发布时间】:2021-11-17 03:40:38
【问题描述】:

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

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

【问题讨论】:

  • 平均值为 78.33,标准差为 105.37。所有值都在 3 个标准差以内。您如何获得 200 岁的“真实”?
  • 我相信stackoverflow.com/a/57256962/536503这里的答案是正确的。正如上面 not_speshal 的评论
  • @not_speshal,谢谢,这很有帮助!我没有在Excel中检查它。但你明白我的逻辑!谢谢!

标签: python pandas outliers


【解决方案1】:

试试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

【讨论】:

  • 如何在没有 gropby 的情况下更新此代码?如何仅根据数字列进行检查?谢谢!
  • 什么意思?你能举个例子吗?
  • 只有年龄列。数据 = {'年龄':[18, 200, 17]}。如果我不想分组,但要识别异常值并创建一个新的 True/False 列。
  • 我有多个数字列,并希望为每个数字列创建一个单独的新列,其中 True/False 如上所述
  • 太棒了,我希望我能接受两次!感谢您的时间和努力。
猜你喜欢
  • 2016-08-28
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多