Pandas基于同DataFrame跨列条件筛选保留目标行的方法
Pandas 多分组条件筛选保留符合规则的全组行
问题场景
现有包含col1、col2、col3三列的DataFrame,示例数据规则:
- 共4条记录,
col1列取值均为Device1 col2列取值依次为A、A、C、B- 对应
col3列取值依次为true、false、false、false
筛选需求:按col1(设备维度)和col2做分组,仅保留分组内col3列至少存在1个true值的分组下的所有行。
以上述示例数据为例,只有col2=A的分组存在col3=true的记录,因此预期筛选结果仅保留col2=A的2条记录,对应col3取值分别为true、false。
实现代码
import pandas as pd # 构造示例数据集 df = pd.DataFrame({ 'col1': ['Device1'] * 4, 'col2': ['A', 'A', 'C', 'B'], 'col3': [True, False, False, False] }) # 生成分组筛选掩码:同(col1, col2)分组下存在任意col3为True则标记为保留 filter_mask = df.groupby(['col1', 'col2'])['col3'].transform('any') # 执行筛选 result = df[filter_mask]
逻辑说明
groupby(['col1', 'col2'])['col3'].transform('any')会生成和原DataFrame长度完全对齐的布尔序列:某行所在的(col1, col2)分组中只要存在任意一条记录的col3为True,对应行的掩码值就为True,否则为False- 直接用该掩码做行筛选,会完整保留符合条件分组下的所有记录,不会丢失同组内col3为False的行,完全匹配需求。
执行代码后得到的结果如下:
col1 col2 col3 0 Device1 A True 1 Device1 A False
内容的提问来源于stack exchange,提问作者Skat
相关产品推荐
相关产品推荐

