如何对两个相同大小的布尔型Pandas DataFrame执行AND、OR、XOR逻辑运算
Pandas布尔型DataFrame逐元素逻辑运算问题解答
可以直接对两个大小一致、全为布尔值的Pandas DataFrame执行逐元素的AND、OR、XOR逻辑运算,具体操作规则如下:
- 逐元素AND运算:使用
&运算符,或调用df1.logical_and(df2)方法 - 逐元素OR运算:使用
|运算符,你给出的示例直接执行df1 | df2即可得到预期结果 - 逐元素XOR运算:使用
^运算符,或调用df1.logical_xor(df2)方法
注意:不要使用Python原生的
and/or/not关键字执行运算,这类关键字会尝试对整个DataFrame对象做布尔判断,Pandas不支持该操作,会直接抛出异常。
以下是你给出的示例验证代码:
import pandas as pd # 构造示例数据 df1 = pd.DataFrame([ [False, True, False], [True, False, True] ]) df2 = pd.DataFrame([ [True, False, False], [True, False, False] ]) # 执行OR运算 or_result = df1 | df2 print(or_result)
运行后输出结果和你的预期完全一致:
0 1 2 0 True True False 1 True False True
额外说明:如果两个DataFrame的索引、列名不完全匹配,Pandas会先按标签对齐后再运算,匹配失败的位置会返回空值NaN。如果需要严格按相对位置逐元素运算,可以先提取底层numpy数组运算后再转回DataFrame,参考写法:pd.DataFrame(df1.values | df2.values, index=df1.index, columns=df1.columns)
内容的提问来源于stack exchange,提问作者Jj Rr
相关产品推荐
相关产品推荐

