How can I obtain the element-wise logical NOT of a pandas Series?
I have a pandas
Series object containing boolean values. How can I get a series containing the logical
NOT of each value?
For example, consider a series containing:
True True True False
The series I'd like to get would contain:
False False False True
This seems like it should be reasonably simple, but apparently I've misplaced my mojo =(
To invert a boolean Series, use
In : s = pd.Series([True, True, False, True]) In : ~s Out: 0 False 1 False 2 True 3 False dtype: bool
Using Python2.7, NumPy 1.8.0, Pandas 0.13.1:
In : s = pd.Series([True, True, False, True]*10000) In : %timeit np.invert(s) 10000 loops, best of 3: 91.8 µs per loop In : %timeit ~s 10000 loops, best of 3: 73.5 µs per loop In : %timeit (-s) 10000 loops, best of 3: 73.5 µs per loop
As of Pandas 0.13.0, Series are no longer subclasses of
numpy.ndarray; they are now subclasses of
pd.NDFrame. This might have something to do with why
np.invert(s) is no longer as fast as
timeit results may vary depending on many factors including hardware, compiler, OS, Python, NumPy and Pandas versions.