我有一个包含 bool 值的 Pandas Series
对象。如何获得包含每个值的逻辑 NOT
的系列?
例如,考虑一个包含以下内容的系列:
True
True
True
False
我想获得的系列将包含:
False
False
False
True
这似乎应该相当简单,但显然我放错了我的魔力 =(
最佳答案
要反转 bool 系列,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
使用 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 版本。
关于python - 如何获得 Pandas 系列的元素逻辑非?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15998188/