Pandas 1.3.4如何按col1不同取值设置col2阈值筛选行
Pandas 多组行条件筛选实现方案
Pandas 1.3.4版本完全支持该需求,以下是两种常用实现方式:
方案1:直接拼接布尔条件
按照需求把每一组规则拆成(col1匹配判断) & (col2阈值判断)的组合,再用逻辑或|拼接所有规则即可,注意每一组独立条件必须用括号包裹,避免运算符优先级出错:
result = df[ ((df['col1'] == 'A') & (df['col2'] > 10)) | ((df['col1'] == 'C') & (df['col2'] > 5)) | ((df['col1'] == 'B') & (df['col2'] > 1000)) ]
方案2:阈值映射法(规则较多时更简洁)
如果后续需要调整/新增规则,直接修改阈值字典即可,不需要修改判断逻辑:
- 首先定义col1取值对应的阈值映射:
threshold_map = { 'A': 10, 'C': 5, 'B': 1000 }
- 把col1列映射为对应阈值后和col2比较即可完成筛选:
result = df[df['col2'] > df['col1'].map(threshold_map)]
两种方案得到的结果都和预期一致:
| index | col1 | col2 |
|---|---|---|
| 1 | A | 20 |
| 3 | C | 10 |
内容的提问来源于stack exchange,提问作者Tim Kirkwood
相关产品推荐
相关产品推荐

