2013-09-23 72 views
6

我在兩個系列上執行布爾操作。我期待布爾操作自動執行對應於相同索引的操作。但是,它只是按順序來做。這是預期的行爲還是有一些不同的方式來做到這一點? 感謝在Python熊貓中,布爾操作

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 [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 [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 [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