2013-09-02 3 views
19

나는 이라는 팬더 DataFramems이라는 열이 있습니다. data.ms이 95 % 백분위 수 이상인 모든 행을 제거하고 싶습니다. 작동주어진 백분위 수를 초과하는 모든 데이터 제거

limit = data.ms.describe(90)['95%'] 
valid_data = data[data['ms'] < limit] 

,하지만 난 어떤 백분위 수에 해당 일반화하려는 지금, 나는이 일을하고 있습니다. 그렇게하는 가장 좋은 방법은 무엇입니까?

답변

41

Series.quantile() 방법을 사용 할 df.a이 95 %보다 크거나 같은 df의 행을 필터링하려면

In [48]: cols = list('abc') 

In [49]: df = DataFrame(randn(10, len(cols)), columns=cols) 

In [50]: df.a.quantile(0.95) 
Out[50]: 1.5776961953820687 

을 :

In [72]: df[df.a < df.a.quantile(.95)] 
Out[72]: 
     a  b  c 
0 -1.044 -0.247 -1.149 
2 0.395 0.591 0.764 
3 -0.564 -2.059 0.232 
4 -0.707 -0.736 -1.345 
5 0.978 -0.099 0.521 
6 -0.974 0.272 -0.649 
7 1.228 0.619 -0.849 
8 -0.170 0.458 -0.515 
9 1.465 1.019 0.966 
+0

, 빠른 방법 유사한 NumPy와 방송이있다? –

+0

또한 모든 열, 즉'df [df

12

NumPy와이 훨씬 빠른 팬더보다 종류 :

numpy.percentile(df.a,95) # attention : the percentile is given in percent (5 = 5%) 

해당하지만보다 3 배 빠른 : 그것은 당신의 코드에 대한 그래서

df.a.quantile(.95) # as you already noticed here it is ".95" not "95" 

제공 : 나는 특정 분위수와 다른 COL을 비교하려면 팬더를 사용하여

df[df.a < np.percentile(df.a,95)] 
관련 문제