series de pandas filtrando entre valores

Si s es una pandas.Series , sé que puedo hacer esto:

 b = s < 4 

o

 b = s > 0 

pero no puedo hacer

 b = 0 < s < 4 

o

 b = (0 < s) and (s < 4) 

¿Cuál es el método de los pandas idiomáticos para crear una serie booleana basada en el Y / OR / NOT lógico de otras series booleanas?

lo encontró … el operador & funciona, pero necesita usar paréntesis para obtener la prioridad correcta y evitar un error:

 >>> import pandas as pd >>> s1 = pd.Series([0,1,2,3,4,5,6,0,1,2,3,4]) >>> (s1 < 4) & (s1 > 0) 0 False 1 True 2 True 3 True 4 False 5 False 6 False 7 False 8 True 9 True 10 True 11 False dtype: bool >>> s1 < 4 & s1 > 0 Traceback (most recent call last): File "", line 1, in  File "c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\core\generic.py", line 698, in __nonzero__ .format(self.__class__.__name__)) ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

También puedes usar .between :

 s1.between(0, 4, inclusive=False) 

Un poco detallado, pero como no tiene que crear 2 series intermedias, debería ser más rápido (sin duda no probado).