使用不包括中位数的 IQR 方法查找 python 中的异常值

Finding outliers in python with the IQR Method excluding the median

我想计算一个小数据集的第一个和第三个四分位数以确定异常值:

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 上有一个示例,说明如何使用所需的第一和第三四分位数以我想要的方式计算异常值。

有什么建议吗?

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

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

        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)