2017-12-26 5 views
0

から条件付き外れ値を取得します。私は2つの列を持つデータフレームを持っています。手動5速( 'Transmission'列にある1つのタイプのトランスミッション)には異常値があります。パンダは別の列

分数値を使って値をチェックすることで、異常値のある行を削除することを考えました。

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

だから、150分位数以上のすべての値および0.01分位以下のすべての値。しかし、このように単純な方法では、「伝達」列からの関連する伝達なしに外れ値を得ることができます。条件を追加するにはどうすればよいのですか?

編集: DF全体が32k行あり、あまりにも多く表示されるため、DF全体を投稿できません。あなたはそれをテストすることができますので、私はあなたの元データフレームに列を追加している

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

第2列には9つの要素があり、第1列には10があることを確認してください。 – user32185

答えて

0

:ここ は、データフレームの最初の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))  

この列を使用してフィルタリングできます。

関連する問題