如何获得pandas系列的元素逻辑NOT?

我有一个包含布尔值的pandas系列对象。如何获得包含每个值的逻辑而不是的序列

例如,考虑一系列包含:

True
符合事实的
符合事实的
错误的

我想要的系列包括:

错误
错误的
错误的
符合事实的

这看起来应该很简单,但显然我把魔酒放错地方了=(

要反转布尔级数,请使用~s

[7]on

:s=pd.系列([True,True,False,True])
At[8]:~s中
Output[8]:
0错误
1错误
2正确
3错误
数据类型:bool

使用Python2.7、NumPy 1.8.0、Pandas 0.13.1:

[119]on

:s=pd.系列([True,True,False,True]*10000)
At[10]on:%timeit np.invert(s)
10000个回路,最好为3个:每个回路91.8µs
At[11]:%timeit~s中
10000个回路,最好为3个:每个回路73.5µs
[12]on:%timeit(-s)
10000个回路,最好为3个:每个回路73.5µs

从Pandas 0.13.0开始,Series不再是numpy.ndarray的子类;它们现在是pd.NDFrame的子类。这可能与np.invert(s)不再像~s-s那么快有关

警告:timeit结果可能因硬件、编译器、操作系统、Python、NumPy和Pandas版本等多种因素而有所不同

发表评论