Para inverter uma série booleana, use~s
:
In [7]: s = pd.Series([True, True, False, True])
In [8]: ~s
Out[8]:
0 False
1 False
2 True
3 False
dtype: bool
Usando Python2.7, NumPy 1.8.0, Pandas 0.13.1:
In [119]: s = pd.Series([True, True, False, True]*10000)
In [10]: %timeit np.invert(s)
10000 loops, best of 3: 91.8 µs per loop
In [11]: %timeit ~s
10000 loops, best of 3: 73.5 µs per loop
In [12]: %timeit (-s)
10000 loops, best of 3: 73.5 µs per loop
A partir do Pandas 0.13.0, as séries não são mais subclasses de numpy.ndarray
; agora são subclasses de pd.NDFrame
. Isso pode ter algo a ver com o porquê np.invert(s)
não é mais tão rápido quanto ~s
ou -s
.
Advertência: os timeit
resultados podem variar dependendo de muitos fatores, incluindo versões de hardware, compilador, SO, Python, NumPy e Pandas.
object
tipos para as respostas abaixo funcionarem, portanto, use:~ df.astype('bool')