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

标签 python pandas operators boolean-logic

我有一个包含 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/

相关文章:

python - 飞行数据集的准确性非常低

python - 在列表中查找包含最大数字的字符串

python - Pandas read_hdf 按日期和时间范围查询

python - 如何拆分数据框单元格中的数据并在拆分时执行 Pandas groupby?

python - 如何在 Pandas 数据框中显示特定数字

java - 前缀和后缀运算符java

python - Pandas 中的 fillna - 如何自动选择最佳方法?

python - 如何从 python 列表中删除重复的元组?

javascript - 通过前缀和后缀运算符递增数字

c++ - 继承中的对象比较