如何用Pandas按event_block分组统计blink事件的数量?
Pandas按分组统计指定事件数量的解决方案
需求
统计DataFrame里event_block每个分组(0到5)中,event_code列"blink"事件的出现次数,每个分组行数一致。
示例数据:
event_block event_code 0 0 blink 1 0 blink 2 0 -1 3 0 -1 4 0 -1 5 1 -1 6 1 blink 7 1 -1 8 1 blink 9 1 -1
问题点
你生成is_blink二进制列的方向是对的,但没做分组聚合——如果误用transform求和会让每行都显示分组的统计值,而我们需要的是每个分组一行的汇总结果。
几种简洁解法
解法1:布尔列分组求和
先标记出"blink"事件,再按分组求和:
# 生成布尔标记并分组统计 blink_counts = (df['event_code'] == 'blink').groupby(df['event_block']).sum().astype(int) # 转成指定格式的DataFrame result = pd.DataFrame({'blink_count': blink_counts})
解法2:分组后直接统计
通过groupby的apply方法直接计算每个分组内的"blink"数量:
blink_counts = df.groupby('event_block')['event_code'].apply(lambda g: (g == 'blink').sum()) result = pd.DataFrame({'blink_count': blink_counts})
解法3:交叉表快速统计
用crosstab生成分组与事件的频次表,直接提取"blink"的计数:
import pandas as pd blink_counts = pd.crosstab(df['event_block'], df['event_code'])['blink'] result = pd.DataFrame({'blink_count': blink_counts})
输出结果
执行后会得到每个分组的"blink"计数,对应示例数据的输出为:
blink_count event_block 0 2 1 2
如果你的数据包含0-5所有分组,未出现"blink"的分组会自动显示0,符合你的期望输出格式。
内容的提问来源于stack exchange,提问作者Giovanni Chiarion
相关产品推荐
相关产品推荐

