2013-09-23 23 views
6

İki Seriler'de boole işlemi gerçekleştiriyorum. Aynı dizine karşılık gelen işlemi otomatik olarak yapmak için boole işlemini beklerdim. Ama bunun yerine sadece siparişle yapıyor. Bu beklenen davranış mı yoksa bunu yapmanın farklı bir yolu var mı? TeşekkürPython Pandalarda, boole işlemi

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

Bunun beklenmedik olduğunu düşünüyorum ... –

cevap

6

Bu benim için bug gibi görünüyor: Geçici çözüm için

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 

bir yolu aynı dizini kullanarak reindex şudur:

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

Not: Bu davranış 0,13 olarak sabitlenecektir. –

+0

Bu düzeltildi. 19 sürümünde bu sorun yok –

2

aynı uzunlukta Serisi varsa Diğer Serilerin ihtiyaçlarınızı karşılayacak şekilde sıraya dizilmesi için bir Dizinin indeksini kullanabilmeniz gerekir.

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 

İstenilen işlevler pandalar 0.17.1'den itibaren geçerli olduğunu doğrulayabilirim.

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