2016-10-20 12 views
3

私はDataFrameを持っており、列の値(v)がx<=v<=yを満たしているかどうかチェックしたいと思います。列の値がPandasの範囲内にあるかどうかをチェックする方法は?

equal = any(df['columnX'] == value) # No problems here 
in_between = any(x <= df['columnX'] <= y) # ValueError :/ 

私が手にエラーがValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().あるしかし、私はすでにany()を使用しています!

ここで問題は何ですか?なぜ==では動作しますが、x<=v<=yでは動作しません。

答えて

7

これを行うために使用between、それはまた、範囲値がinclusive argを経由して含まれているか否かをサポートしています。

In [130]: 
s = pd.Series(np.random.randn(5)) 
s 

Out[130]: 
0 -0.160365 
1 1.496937 
2 -1.781216 
3 0.088023 
4 1.325742 
dtype: float64 

In [131]: 
s.between(0,1) 

Out[131]: 
0 False 
1 False 
2 False 
3  True 
4 False 
dtype: bool 

あなたはその後、上記にanyを呼び出す:

In [132]: 
s.between(0,1).any() 

Out[132]: 
True 
+0

これは正しいでしょうか? 'in_between = any(df ['columnX']。(x、y、inclusive = True)の間)' –

+0

私は 'in_between = df ['columnX']。(x、y、inclusive = True)の間にします。任意の() 'は個人的にはうまくいくでしょう – EdChum

+0

はい、うまくいけば、両方の方法で同じ結果が得られました。ありがとう! –

3

あなたはできるだけ

df[(x <= df['columnX']) & (df['columnX'] <= y)] 

この行は、条件を満たすdf内のすべての行を選択します。

関連する問題