在Python Pandas中,布尔操作

时间:2013-09-23 05:53:22

标签: python boolean pandas series

我正在两个系列上执行布尔运算。我期待布尔操作自动执行与同一索引相对应的操作。但它只是通过订单来做。这是预期的行为还是有一些不同的做法? 感谢

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

2 个答案:

答案 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

答案 1 :(得分: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

我可以确认,从pandas 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