使用IQR方法在python中查找异常值,不包括中值

问题描述 投票:0回答:1

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

600013500150001500017948

虽然理论上计算非常简单,但是我发现python使用的方法与我想要的方法不同(Excel函数Quartile.EXC使用的是)。区别在于python在四分位数计算中包括中位数。因此,对于第一个四分位数python输出13500,对于第三个四分之一python输出13500。我想要的是9750和16474。我没有找到允许我执行此操作的选项。

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

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

关于https://www.mathwords.com/o/outlier.htm是有关如何使用所需的第一四分位数和第三四分位数来计算离群值的示例。

有什么建议吗?

很抱歉,关于此问题的任何规定均不符合规定。我刚刚创建了这个帐户,需要快速获得答案:/

python pandas outliers iqr
1个回答
0
投票

我认为这可以解决问题。当存在偶数组时,它应包括一个中间值来计算四分位数。

        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)
© www.soinside.com 2019 - 2024. All rights reserved.