You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于布尔列过滤Pandas数据:用groupby筛选符合条件的ID数据

实现方法

要筛选出满足条件的ID对应的完整数据,可通过分组统计-条件筛选-提取数据三步完成,具体实现如下:

1. 构造示例DataFrame

先还原你提供的测试数据:

import pandas as pd

data = {
    'ID': [7,7,7,8,8,8,9,9,9,9],
    'bool_1': [True, False, False, True, True, False, True, True, True, True],
    'bool_2': [True, True, False, True, True, False, True, False, False, False],
    'bool_3': [True, True, True, True, True, True, True, True, True, False]
}
df = pd.DataFrame(data)

2. 编写筛选函数

核心思路是先按ID分组统计各布尔列的True数量,再筛选符合条件的ID,最后提取对应行:

def filter_valid_ids(df):
    # 按ID分组,统计每个组内各bool列的True值数量(True等价于1,sum直接计数)
    group_counts = df.groupby('ID')[['bool_1', 'bool_2', 'bool_3']].sum()
    
    # 筛选满足条件的ID:bool_1至少1个True,bool_2至少2个,bool_3至少3个
    valid_ids = group_counts[
        (group_counts['bool_1'] >= 1) &
        (group_counts['bool_2'] >= 2) &
        (group_counts['bool_3'] >= 3)
    ].index
    
    # 返回原DataFrame中所有有效ID的行
    return df[df['ID'].isin(valid_ids)]

3. 验证结果

调用函数后,输出结果将只包含ID为7和8的完整数据:

result = filter_valid_ids(df)
print(result)

输出内容:

ID  bool_1  bool_2  bool_3
0   7    True    True    True
1   7   False    True    True
2   7   False   False    True
3   8    True    True    True
4   8    True    True    True
5   8   False   False    True

关键逻辑说明

  • groupby('ID').sum():利用布尔值在pandas中可转换为整数(True=1,False=0)的特性,直接求和得到每个ID对应布尔列的True数量。
  • isin(valid_ids):通过布尔索引快速从原数据中提取符合条件的所有行,保留原始数据的完整结构。

内容的提问来源于stack exchange,提问作者Telis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:52:24