Python 如何在DataFrame和Series之间进行逻辑操作?

Python 如何在DataFrame和Series之间进行逻辑操作?,python,pandas,dataframe,boolean,logical-operators,Python,Pandas,Dataframe,Boolean,Logical Operators,假设我有一个具有相同索引的boolDataFrame df和一个boolSeries x,我想在每个列的df和x之间进行逻辑运算。与使用数据帧相比,是否有像数据帧.sub这样的快捷方法 In [31]: df Out[31]: x y z u A False False True True B True True True True C True False False False In [32]: x Out

假设我有一个具有相同索引的bool
DataFrame df
和一个bool
Series x
,我想在每个列的
df
x
之间进行逻辑运算。与使用数据帧相比,是否有像数据帧.sub这样的快捷方法

In [31]: df
Out[31]: 
       x      y      z      u
A  False  False   True   True
B   True   True   True   True
C   True  False  False  False

In [32]: x
Out[32]: 
A     True
B    False
C     True
dtype: bool

In [33]: r = df.apply(lambda col: col & x) # Any other way ??

In [34]: r
Out[34]: 
       x      y      z      u
A  False  False   True   True
B  False  False  False  False
C   True  False  False  False
使用,但需要转换为
int
,然后转换为
bool
,因为
UserWarning

print (df.astype(int).mul(x.values, axis=0).astype(bool))
       x      y      z      u
A  False  False   True   True
B  False  False  False  False
C   True  False  False  False
类似的解决方案:

print (df.mul(x.astype(int), axis=0).astype(bool))
       x      y      z      u
A  False  False   True   True
B  False  False  False  False
C   True  False  False  False

C:\Anaconda3\lib\site packages\pandas\computation\expressions.py:181:UserWarning:在Python空间中求值,因为numexpr不支持bool数据类型的“*”运算符,请改用“&” 不支持的[op_str]))

另一个
numpy
解决方案具有:

print (df.mul(x.values, axis=0))
       x      y      z      u
A  False  False   True   True
B  False  False  False  False
C   True  False  False  False
print (pd.DataFrame(np.logical_and(df.values, x.values[:, None]), 
                                   index=df.index, 
                                   columns=df.columns))

       x      y      z      u
A  False  False   True   True
B  False  False  False  False
C   True  False  False  False