Python 熊猫:两个布尔级数之和

Python 熊猫:两个布尔级数之和,python,pandas,Python,Pandas,在Python中: In [1]: True+True Out[1]: 2 因此,在以下设置之后: import pandas as pd ser1 = pd.Series([True,True,False,False]) ser2 = pd.Series([True,False,True,False]) 我想要的是找到ser1和ser2的元素式求和,布尔值作为整数进行加法,如Python示例中所示 但Pandas将加法视为元素“或”运算符,并给出以下(不需要的)输出: 我知道我可以在任一系

在Python中:

In [1]: True+True
Out[1]: 2
因此,在以下设置之后:

import pandas as pd
ser1 = pd.Series([True,True,False,False])
ser2 = pd.Series([True,False,True,False])
我想要的是找到
ser1
ser2
的元素式求和,布尔值作为整数进行加法,如Python示例中所示

但Pandas将加法视为元素“或”运算符,并给出以下(不需要的)输出:

我知道我可以在任一系列上使用
astype(int)
获得所需的输出:

In [6]: ser1.astype(int) + ser2
Out[6]: 
0    2
1    1
2    1
3    0
dtype: int64

有没有另一种(更“泛音速”)方法来获得[2,1,1,0]系列?有没有一个很好的解释来解释为什么简单的系列添加在这里不起作用?

而不是
+
使用
&

import pandas as pd
ser1 = pd.Series([True,True,False,False])
ser2 = pd.Series([True,False,True,False]) 

print(ser1 & ser2) 

>> 0     True
>> 1    False
>> 2    False
>> 3    False
>> dtype: bool

IIUC,你要找的是操作惯例是numpy布尔数组,而不是Python布尔:

>>> a = True
>>> a+a
2
>>> import numpy as np
>>> np.array([a])
array([ True], dtype=bool)
>>> np.array([a]) + np.array([a])
array([ True], dtype=bool)

这两种方法都有可能,如果记忆至少有一种作用,dev会对这种行为感到惊讶,但这样做符合序列被键入的想法。

我想你误解了我的问题。为了清晰起见,我会编辑的。哎呀,你说得对。我在这一点上跳了枪。我不确定我是否遵循了:如果你想将布尔级数视为元素是int而不是bools,那么调用
astype(int)
听起来就像是潘多拉一样。你在寻找什么样的解释?对,我知道它是有效的。我的问题更多的是关于为什么系列上的pandas
+
操作没有给出与元素相关的python
+
操作相同的结果。是的!这正是我想要的。虽然我想这将问题推向更深一层——你知道为什么这是numpy中的约定吗?@exp1orer“+”是事实上的“&”,而“-”是布尔运算的元素聚合。因为
True
True
的总和实际上是未定义的。所以有人可能会说python实际上是在做一个非python操作(它实际上是先强制int)。但强迫胁迫通常不会在努比/熊猫中进行。这是非音速的伊姆霍。
>>> a = True
>>> a+a
2
>>> import numpy as np
>>> np.array([a])
array([ True], dtype=bool)
>>> np.array([a]) + np.array([a])
array([ True], dtype=bool)