[英]How to do logical operation between DataFrame and Series?
假设我有一个bool DataFrame df
和一个bool Series x
具有相同的索引,并且我想在df
和x
每列之间进行逻辑运算。 与使用DataFrame.apply
相比,有没有像DataFrame.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
使用mul
,但是需要UserWarning
为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
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
C:\\ Anaconda3 \\ lib \\ site-packages \\ pandas \\ computation \\ expressions.py:181:UserWarning:在python空间中进行评估,因为numexpr不支持bool dtype使用'*'运算符,请使用'&'而不支持[ op_str]))
另一个numpy
解决方案与np.logical_and
:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.