pandas シリーズの要素ごとの論理 NOT を取得するにはどうすればよいですか? 質問する

pandas シリーズの要素ごとの論理 NOT を取得するにはどうすればよいですか? 質問する

ブール値を含むpandas オブジェクトがありますSeries。各値の論理を含むシリーズを取得するにはどうすればよいでしょうかNOT?

たとえば、次の内容を含むシリーズを考えてみましょう。

True
True
True
False

私が入手したいシリーズには以下のものが含まれます:

False
False
False
True

これはかなり簡単なように思えますが、どうやら私は自分のモジョを失ってしまったようです =(

ベストアンサー1

ブールシリーズを反転するには、使用~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結果は、ハードウェア、コンパイラ、OS、Python、NumPy、Pandas のバージョンなど、多くの要因によって異なる場合があります。

おすすめ記事