【问题标题】:Finding outliers in python with the IQR Method excluding the median使用IQR方法在python中查找异常值,不包括中位数
【发布时间】:2020-03-25 14:58:41
【问题描述】:

我正在计算一个小数据集的第 1 和第 3 个四分位数以确定异常值:

6000 13500 15000 15000 17948

虽然理论上计算相当简单,但我发现 python 使用的方法与我想要的不同(以及 Excel 函数 Quartile.EXC 使用的方法)。 不同之处在于python在四分位数计算中包含了中位数。因此,对于第一个四分位数 python 输出 13500,对于第三个 15000。我想要的是 9750 和 16474。我还没有找到可以让我这样做的选项。

我已经使用了几个代码来尝试找到该解决方案,我目前的第一个四分位数是q1 = df.NSOT.quantile(0.25, interpolation = 'midpoint')

df 是数据框,NSOT 是具有给定值的列。

https://www.mathwords.com/o/outlier.htm 是一个示例,说明如何使用所需的第一和第三四分位数以我想要的方式计算异常值。

有什么建议吗?

对不起,如果这个问题有任何不符合规定的地方。我刚刚创建了这个帐户,需要快速得到答案:/

【问题讨论】:

    标签: python pandas outliers iqr


    【解决方案1】:

    我认为这可以解决问题。当有一组偶数时,它应该包括一个中间值来计算四分位数。 虽然我很想简单地包含一个选项,但这对我来说是这样的。

            df.sort_values("NSOT", axis = 0, ascending = True, inplace = True, na_position ='last')
            df = df.reset_index(drop=True)
            medianindex = int(len(df.NSOT) / 2)
            if (len(df.NSOT) % 2 == 0):
               # even   
                q1_NSOT = np.percentile(df.NSOT[:medianindex-1], 50)
                q3_NSOT = np.percentile(df.NSOT[medianindex:], 50)
    
            else:
                # odd
                q1_NSOT = np.percentile(df.NSOT[:medianindex], 50)
                q3_NSOT = np.percentile(df.NSOT[medianindex+1:], 50)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 2020-05-06
      • 2018-12-05
      • 2021-09-16
      • 1970-01-01
      • 2014-08-05
      相关资源
      最近更新 更多