python - 如何获得 Pandas 系列的元素逻辑非?

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

https://stackoverflow.com/questions/15998188/

相关文章:

python - 如何一次检查多个键是否在一个字典中?

linux - 如何杀死僵尸进程

c - errno 是线程安全的吗?

linux - 如何找出目录或文件所在的挂载/分区? (Linux 服务器)

linux - 退出 bash 脚本但不退出终端的任何方式

python - 使用 dict 文字和 dict 构造函数之间有区别吗?

linux - sed 中的环境变量替换

linux - 如何在 Ubuntu 上设置和运行 PhantomJS?

python - 如何查找我的系统中安装了哪个版本的 TensorFlow?

python - 如何根据任意条件函数过滤字典?