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

Pandas分组后如何筛选仅保留hbp=1且event=1的计数结果

解决Pandas筛选分组统计的问题

问题分析

你要的是仅统计hbp=1且event=1的记录数,不需要hbp=0的分组结果,之前的两种写法问题出在:

  1. 第一种groupby加lambda的方式,会保留所有hbp的分组(包括hbp=0),所以需要额外过滤;
  2. 第二种query后分组的方式,默认会对所有列做计数,导致多列重复数据,应该指定统计行数或单一列。

解决方案

方案1:改进分组+过滤

先按hbp分组统计event=1的数量,再筛选出hbp=1的行:

import pandas as pd

# 假设你的数据框是df
result = df.groupby('hbp')['event'].apply(lambda x: (x == 1).sum()).reset_index(name='count')
# 过滤掉hbp=0的行
result = result[result['hbp'] == 1]

方案2:先筛选再分组统计行数

先通过query或布尔索引筛选出符合条件的记录,再用size()统计每组行数(避免多列重复):

# 方法A:用query筛选
result = df.query('hbp == 1 and event == 1').groupby('hbp').size().reset_index(name='count')

# 方法B:用布尔索引筛选(和query效果一致)
filtered_df = df[(df['hbp'] == 1) & (df['event'] == 1)]
result = filtered_df.groupby('hbp').size().reset_index(name='count')

方案3:直接计数(最简洁)

如果只需要hbp=1且event=1的总数量,甚至不需要分组,直接计算即可:

# 方式1:用len()统计筛选后的数据行数
count = len(df[(df['hbp'] == 1) & (df['event'] == 1)])

# 方式2:用布尔条件求和(True会被视为1,False为0)
count = ((df['hbp'] == 1) & (df['event'] == 1)).sum()

# 如果需要输出成DataFrame格式
result = pd.DataFrame({'hbp': [1], 'count': [count]})

示例验证

用示例数据测试:

data = {
    'hbp': [1,1,1,0,0,1,0,1],
    'event': [1,1,0,1,0,1,1,1]
}
df = pd.DataFrame(data)

# 用方案2的方法A
result = df.query('hbp == 1 and event == 1').groupby('hbp').size().reset_index(name='count')
print(result)

输出结果:

hbp  count
0    1      4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:32:07