如何通过析取语句(逻辑“或”)对 pandas DataFrame 进行切片? [复制]

Posted

技术标签:

【中文标题】如何通过析取语句(逻辑“或”)对 pandas DataFrame 进行切片? [复制]【英文标题】:How to slice pandas DataFrame by disjunction statement (logical "or")? [duplicate] 【发布时间】:2016-12-22 06:31:50 【问题描述】:

我想对满足条件 A 条件 B 的 pandas.DataFrame 进行切片。大多数搜索结果仅显示如何使用 "and" 对数据帧进行切片。所以我想知道是否可以使用 "or" 运算符而不将 (A and B) 转换为 (not (not A and not B))?因为有时需要很多“或”条件,转换可能很麻烦。

我尝试使用:

df[(df['c1']==x1) or (df['c2']==x2)]

但它不起作用。

【问题讨论】:

切片的工作方式是遍历每个单元格并检查真值,因此任何逻辑语句都可以进入 [] 【参考方案1】:

你需要使用逻辑或符号|

df[(df['c1'] == x1) | (df['c2'] == x2)]

对于and,您需要使用&

df[(df['c1'] == x1) & (df['c2'] == x2)]

【讨论】:

确实是按位或符号,但是逻辑上的or由于短路问题不能重载,所以Pandas不得不改用|

以上是关于如何通过析取语句(逻辑“或”)对 pandas DataFrame 进行切片? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

析取 为什么是并集 合取

Prolog:模拟析取事实

数理逻辑命题逻辑的等值演算与推理演算 ( 命题逻辑 | 等值演算 | 主合取 ( 析取 ) 范式 | 推理演算 ) ★★

第1章  基础:逻辑和证明

异或的用法

位运算之异或运算