2013-09-23 5 views
6

私は2つのSeriesで論理演算を実行しています。私はブール演算が自動的に同じインデックスに対応する操作を行うことを期待していた。しかし代わりにそれは順序でそれをする。これは予想される動作ですか、これを行うには別の方法がありますか? おかげPython Pandasでブール演算

b 
Out[47]: 
AEIS False 
AAPL  True 
ACFN False 
Name: OldPosition, dtype: bool 

a 
Out[48]: 
AAPL  True 
ACFN False 
AEIS  True 
dtype: bool 

a&b 
Out[50]: 
AAPL False 
ACFN False 
AEIS False 
dtype: bool 
+0

これは予期しないと思います... –

答えて

6

は、これは私にはbugのように思える:あなたは、同じ長さのシリーズを持っている場合は

In [4]: index = a.index | b.index 

In [5]: a.reindex(index) & b.reindex(index) 
Out[5]: 
a False 
b  True 
c False 
dtype: bool 
+2

注:この動作は0.13で修正されます。 –

+0

修正されました。バージョン19にはこの問題はありません –

2

:この問題を回避するに

In [1]: a = pd.Series([True, False, True], list('bca')) 

In [2]: b = pd.Series([False, True, False], list('abc')) 

In [3]: a & b 
Out[3]: 
b False 
c False 
a False 
dtype: bool 

一つの方法は、同じインデックスを使用してインデックスを再作成することですあるシリーズのインデックスを使用して、他のシリーズをあなたのニーズに合わせて並べることができるはずです。

In [15]: a[b.index] 
Out[15]: 
a  True 
b  True 
c False 
dtype: bool 

In [16]: b 
Out[16]: 
a False 
b  True 
c False 
dtype: bool 

In [17]: a[b.index] & b 
Out[17]: 
a False 
b  True 
c False 
dtype: bool 

私は、パンダ0.17.1の時点で、望ましい機能が整っていることを確認できます。

In [1]: import pandas as pd 

In [2]: a = pd.Series([True, False, True], list('bca')) 

In [3]: b = pd.Series([False, True, False], list('abc')) 

In [4]: b & a 
Out[4]: 
a False 
b  True 
c False