代码之家  ›  专栏  ›  技术社区  ›  Anakin Skywalker

标记dataframe中的异常值,在数据框中创建新列

  •  0
  • Anakin Skywalker  · 技术社区  · 3 年前

    我看到了 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
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   not_speshal    3 年前

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