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

我有一个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版本。

以上是 如何获得pandas系列的按元素逻辑非? 的全部内容, 来源链接: utcz.com/qa/406268.html

回到顶部