如何获得熊猫系列的按元素逻辑非?
我有一个Series
包含布尔值的pandas对象。如何获得包含NOT
每个值逻辑的序列?
例如,考虑一个包含以下内容的系列:
True
True
True
False
我想要获得的系列将包含:
False
False
False
True
这似乎应该相当简单,但显然我放错了我的mojo =(
-
要反转布尔系列,请使用
~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
使用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
从Pandas
0.13.0开始,Series不再是numpy.ndarray
;的子类。它们现在是的子类pd.NDFrame
。这可能与为什么np.invert(s)
不再像~s
或一样快有关-s
。注意:
timeit
结果可能取决于许多因素,包括硬件,编译器,操作系统,Python,NumPy和Pandas版本。