如何统计Pandas DataFrame中连续3行速度超过限速的出现次数
代码实现方案
实现思路
- 先对每行数据生成超速标记:判断当前行速度是否大于限速
25.3 - 按人员姓名分组后,识别连续超速的区间块
- 统计每个人员名下长度≥3的连续超速区间数量,最终转成字典格式输出
完整代码
import pandas as pd # 限速定义 limit = 25.3 def count_overspeed_events(group): # 生成连续块标识:数值变化时标识+1 block_id = (group['over_limit'] != group['over_limit'].shift()).cumsum() # 筛选出超速的块,统计每个块的长度 valid_blocks = block_id[group['over_limit']].value_counts() # 统计长度≥3的块的数量 return (valid_blocks >= 3).sum() # 构造示例输入数据(实际使用时替换成自己的DataFrame即可) data = [ ["Mary",25.6,0.1],["Mary",25.8,0.2],["Mary",25.1,0.3],["Mary",24.4,0.4], ["Mary",24.2,0.5],["Mary",25.8,0.6],["Mary",25.9,0.7],["Mary",25.8,0.8], ["Mary",25.4,0.9],["Mary",24.9,1.0],["Mary",25.6,1.1],["Mary",25.8,1.2], ["Mary",26.2,1.3] ] df = pd.DataFrame(data, columns=["Name","speed","time"]) # 生成超速标记列 df['over_limit'] = df['speed'] > limit # 按姓名分组统计超速事件次数,转成字典 result = df.groupby('Name').apply(count_overspeed_events).to_dict() print(result)
输出结果
运行上述代码得到的输出和要求一致:
{'Mary': 2}
内容的提问来源于stack exchange,提问作者Christian Rønsholt
相关产品推荐
相关产品推荐

