pythonpandasany

How to check if any value of a column is in a range (in between two values) in Pandas?


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?


Solution

  • 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