I have a DataFrame and I would like to check if any of the values (v) of a column satisfies x<=v<=y
.
equal = any(df['columnX'] == value) # No problems here
in_between = any(x <= df['columnX'] <= y) # ValueError :/
The error I get is ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
But I am using any()
already!
So what's the problem here? Why does it work with ==
but not with x<=v<=y
?
Use between
to do this, it also supports whether the range values are included or not via 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
You then call any
on the above:
In [132]:
s.between(0,1).any()
Out[132]:
True