2017-01-09 63 views
2

说我有一个特点和标签一个数据帧:过滤离群,除了一个

f1 f2 label 
-1000 -100 1 
-5 3 2 
0  4 3 
1  5 1 
3  6 1 
1000 100 2 

我想过滤来自列f1和f2离群获得:

f1 f2 label 
-5 3 2 
0  4 3 
1  5 1 
3  6 1 

我知道我可以这样做:

data = data[(data > data.quantile(.05)) & (data < data.quantile(.95))] 

但'标签'列也将被过滤。我怎样才能避免过滤一些列?我不想手动过滤所有列,因为有几十个。 谢谢。

回答

1

有关下列方法是什么:

In [306]: x = data.drop('label', 1) 

In [307]: x.columns 
Out[307]: Index(['f1', 'f2'], dtype='object') 

In [308]: data[((x > x.quantile(.05)) & (x < x.quantile(.95))).all(1)] 
Out[308]: 
    f1 f2 label 
1 -5 3  2 
2 0 4  3 
3 1 5  1 
4 3 6  1 
+1

顺便说一句,你可能会发现这些有用[组内cumcount(http://stackoverflow.com/a/41558148/2336654)和[cummax组内(HTTP ://stackoverflow.com/a/41526917/2336654) – piRSquared