2013-09-23 12 views
6

Wykonuję operację boolowską na dwóch seriach. Spodziewałem się, że operacja boolowska automatycznie wykona operację odpowiadającą temu samemu indeksowi. Ale zamiast tego robi to po kolei. Czy jest to oczekiwane zachowanie, czy jest inny sposób na zrobienie tego? DziękiW Pandonie Pandy, operacja boolowska

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

Myślę, że to nieoczekiwane ... –

Odpowiedz

6

Wydaje się to bug do mnie:

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 

Jednym ze sposobów obejścia tego problemu jest reindex przy użyciu tego samego indeksu:

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

Uwaga: to zachowanie zostanie naprawione w wersji 0.13. –

+0

Zostało to naprawione. Wersja 19 nie ma tego problemu –

2

Jeśli masz długość samej serii powinieneś być w stanie użyć indeksu z jednej serii, aby zamówić drugą serię, aby dopasować ją do swoich potrzeb.

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 

Mogę potwierdzić, że od pandy 0.17.1 żądana funkcjonalność jest na miejscu.

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