繁体   English   中英

如何在DataFrame和Series之间进行逻辑运算?

[英]How to do logical operation between DataFrame and Series?

假设我有一个bool DataFrame df和一个bool Series x具有相同的索引,并且我想在dfx每列之间进行逻辑运算。 与使用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 ,但是需要UserWarningint然后转换为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM