熊猫 - 从另一栏获得有条件的异常值

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

我有一个包含两列的Dataframe:

'Transmission' (object)
'City MPG (FT1)' (int64)

箱线图显示了一些异常值的传输值。手动5速(“传输”列中的一种传输类型)如果有异常值则有很多。

我想通过检查带分位数的值来删除带有异常值的行。

q_99 = data["City MPG (FT1)"].quantile(0.99)
q_1 = data["City MPG (FT1)"].quantile(0.01)

然后检查具有异常值的行,如下所示:

data[(data["City MPG (FT1)"] > q_99) | (data["City MPG (FT1)"] < q_1)]

因此,每个值高于0.99分位数,每个值低于0.01分位数。但是这种方式很容易得到异常值而没有来自“传输”列的相关传输。如何添加条件以及删除那些行的代码是什么?

编辑:我不能发布整个DF,因为它有32k行,而且太多了。以下是Dataframe的10个第一行:

data = pd.DataFrame({'Transmission':['Manual 5-Speed',
                                     'Manual 5-Speed',
                                     'Manual 5-Speed',
                                     'Manual 5-Speed',
                                     'Automatic 3-Speed',
                                     'Automatic 3-Speed',
                                     'Automatic 3-Speed',
                                     'Automatic 3-Speed',
                                     'Automatic 3-Speed',
                                     'Automatic 3-Speed'],
                      'City MPG (FT1)':[17,17,18,
                                        18,18,18,
                                        13,13,15,16]})
python pandas
1个回答
0
投票

我正在为原始数据框添加一列,以便您可以对其进行测试。

def fun(x):
    q_99 = x.quantile(0.99)
    q_1 = x.quantile(0.01)
    return (x>q_99) | (x<q_1)

data["is_outlier"] = data.groupby("Transmission")["City MPG (FT1)"].transform(lambda x: fun(x))    

现在您可以使用此列进行过滤。

© www.soinside.com 2019 - 2024. All rights reserved.