2013-09-23 5 views
6

Ich bin Boolesche Operation auf zwei Serien. Ich habe erwartet, dass die boolesche Operation automatisch die Operation ausführt, die dem gleichen Index entspricht. Aber es macht es nur auf Bestellung. Ist dies das erwartete Verhalten oder gibt es einen anderen Weg dies zu tun? DankIn Python Pandas, boolesche Operation

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

Ich denke, das ist unerwartet ... –

Antwort

6

Dies scheint ein bug mir:

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 

Ein Weg, um Abhilfe zu indizieren ist, den gleichen Index mit:

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

Hinweis: Dieses Verhalten wird in 0,13 behoben. –

+0

Es wurde behoben. Version 19 hat dieses Problem nicht –

2

Wenn Sie die gleiche Länge Series Sie sollten in der Lage sein, den Index einer Serie zu verwenden, um die andere Serie so zu ordnen, dass sie Ihren Anforderungen entspricht.

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 

Ich kann bestätigen, dass ab Pandas 0.17.1 die gewünschte Funktionalität vorhanden ist.

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