2013-09-23 22 views
6

Sto eseguendo un'operazione booleana su due serie. Mi aspettavo che l'operazione booleana eseguisse automaticamente l'operazione corrispondente allo stesso indice. Ma invece lo fa solo per ordine. È questo il comportamento previsto o c'è un modo diverso di farlo? GrazieIn Python Pandas, operazione booleana

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

Penso che questo sia inaspettato ... –

risposta

6

Questo mi sembra un bug a me:

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 

Un modo per risolvere il problema è quello di reindicizzare utilizzando lo stesso indice:

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

Nota: questo comportamento verrà risolto in 0.13. –

+0

È stato corretto. La versione 19 non ha questo problema –

2

Se avete la stessa serie di lunghezza dovresti essere in grado di utilizzare l'indice di una serie per ordinare le altre serie di allinearsi in base alle tue esigenze.

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 

Posso confermare che a partire da panda 0.17.1 la funzionalità desiderata è a posto.

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 
Problemi correlati