4.2.3-多条件联合筛选.md

4.2.3 多条件联合筛选

在 4.2.2 中,把关系运算得到的布尔序列当作布尔索引,即可按单一条件筛选序列或数据框。当筛选条件多于一个时,需要把多个条件用逻辑运算符组合后再做布尔索引,这就是多条件联合筛选。课程给出的组合运算符是 &(与)和 |(或):& 要求所有条件同时为 True,| 只要有一个条件为 True。序列(Series)和数据框(DataFrame)都可以这样筛选。

以收盘价序列为例:close 的标签为平安科技、南方通信、幸福银行,对应值 44.3、22.6、6.5。执行 close[(close>20) & (close<40)] 时,每个条件都要用圆括号。平安科技 44.3 大于 20 但不小于 40,幸福银行 6.5 小于 40 但不大于 20,只有南方通信 22.6 同时满足,结果仍是序列。数据框则按行筛选:对股价数据框 df(行标签 2024-01 至 2024-04,列为平安科技、南方通信、幸福银行),df[(df['平安科技'] > 47) & (df['南方通信']>26)] 只保留两列条件同时成立的行。2024-02 的平安科技 47.1、南方通信 27.3 同时满足,该行幸福银行 4.6 一并保留;其余月份至少有一个条件为 False,整行被去掉。若把 & 换成 |,则只要任一条件成立就会保留该行。

写法上有两处硬性要求。第一,每个条件都必须加圆括号,例如 (close>20) & (close<40),不能写成 close>20 & close<40,否则 &、| 会先于比较运算结合,引发类型错误或错误结果。第二,不能用 Python 的 and、or 代替 &、|,它们不能对序列做逐元素运算。对序列,结果是满足条件的子序列;对数据框,结果是满足条件的行构成的新数据框,列结构不变。易错点:漏写括号;误用 and/or;对数据框筛选时应对各列分别做关系运算再组合,最后用组合后的布尔序列索引整张表。

关键要点

下载此文件