如何获得熊猫系列的按元素逻辑非?

发布于 2021-01-29 14:55:39

我有一个Series包含布尔值的pandas对象。如何获得包含NOT每个值逻辑的序列?

例如,考虑一个包含以下内容的系列:

True
True
True
False

我想要获得的系列将包含:

False
False
False
True

这似乎应该相当简单,但显然我放错了我的mojo =(

关注者
0
被浏览
94
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    要反转布尔系列,请使用~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版本。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看