Python group by分组筛选:组内有isSelected=Yes仅保留该行如何实现?
解决方案
我们可以用pandas库的分组功能实现该需求,实现代码如下:
import pandas as pd # 构造示例数据集 df = pd.DataFrame({ 'Part': [1, 1, 5, 5, 3, 3], 'project': ['A', 'A', 'C', 'C', 'B', 'B'], 'Quote': [1, 1, 2, 2, 3, 3], 'Price': [5.0, 2.2, 6.6, 1.2, 5.5, 4.6], 'isSelected': ['No', 'Yes', 'No', 'Yes', 'No', 'No'] }) # 分组筛选规则 def filter_group(group): # 检查当前分组是否存在isSelected为Yes的行 has_yes = (group['isSelected'] == 'Yes').any() if has_yes: # 存在则仅保留isSelected为Yes的行 return group[group['isSelected'] == 'Yes'] # 不存在则返回分组全部行 return group # 按指定字段分组后应用筛选规则 result = df.groupby(['Part', 'project', 'Quote'], group_keys=False).apply(filter_group).reset_index(drop=True) print(result)
运行代码后输出的结果和预期完全一致:
| Part | project | Quote | Price | isSelected |
|---|---|---|---|---|
| 1 | A | 1 | 2.2 | Yes |
| 5 | C | 2 | 1.2 | Yes |
| 3 | B | 3 | 5.5 | No |
| 3 | B | 3 | 4.6 | No |
补充说明
如果你的实际数据中同一个分组可能存在多条isSelected=Yes的行,上述代码也会全部保留,可根据业务需要额外添加去重规则调整。
内容的提问来源于stack exchange,提问作者Bobby Plourde
相关产品推荐
相关产品推荐

