2017-12-26 10 views
0

에서 조건 이상 값을 얻기 나는 두 개의 열이있는 Dataframe 있습니다. 수동 5 단 변속기 ('변속기'열에있는 변속기의 한 유형)에는 이상치 값이 ​​많습니다.팬더는 다른 열

나는 quantiles로 값을 검사함으로써 아웃 라이어가있는 행을 삭제할 것을 고려했다. 이런 아웃 라이어와 행을 검사

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 행을 가지고 있으며 너무 많이 보여주기 때문입니다. 당신이 그것을 테스트 할 수 있도록

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]}) 
+0

원본 DF의 일부를 우리와 공유 하시겠습니까? 아마도'df.to_dict()'와 함께. 감사합니다 – user32185

+0

예, 그럴 겁니다. 하지만 32k 행이 있기 때문에 여러분에게 보여줄 것입니다. – Bindl

+0

두 번째 열에는 9 개의 요소가있는 '데이터'를 확인하십시오. 첫 번째 열에는 10이 있습니다. 그런 다음 데이터가 오두막 외부에 값이 없습니다. – user32185

답변

0

내가 원래 dataframe에 열을 추가 해요 : 여기 는 Dataframe의 10 첫 번째 행입니다.

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))  

이제이 열을 사용하여 필터링 할 수 있습니다.