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

2024-04-27 02:59:52 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个bool DataFrame df和一个bool Series x,我想在每列df和{}之间进行逻辑运算。与使用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

Tags: 方法lambdainfalsetruedataframedfany
1条回答
网友
1楼 · 发布于 2024-04-27 02:59:52

使用^{},但需要转换为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

类似解决方案:

^{pr2}$
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: evaluating in Python space because the '*' operator is not supported by numexpr for the bool dtype, use '&' instead unsupported[op_str]))

另一种numpy解决方案,带有^{}

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

相关问题 更多 >