python - 以固定时间频率增长的数据如何统计相同标志位的次数

查看:155
本文介绍了python - 以固定时间频率增长的数据如何统计相同标志位的次数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如有以下数据

datetime             flag
2017-08-03 12:10:00  0
2017-08-03 12:10:10  0
2017-08-03 12:10:20  1
2017-08-03 12:10:30  1
2017-08-03 12:10:40  1
2017-08-03 12:10:50  0
2017-08-03 12:11:00  0
2017-08-03 12:11:10  1
2017-08-03 12:11:20  1
2017-08-03 12:11:30  1
2017-08-03 12:11:40  0

目前需要统计出flag持续为1的时间段,如统计结果需要如下

flag      start_datetime               end_datetime
1         2017-08-03 12:10:20          2017-08-03 12:10:50
1         2017-08-03 12:11:10          2017-08-03 12:11:30

因为数据量太大,用代码写判断感觉好慢,大家有没有好的方法使用统计学的方法统计出来呢,也可以是数据库分析函数或者代码思路也可以。目前数据是存储在数据库上的。在此感谢在这回答的各位。

解决方案

不考虑数据量庞大超过计算机内存上限的情况下,下面这样可以
如数据在a.txt

datetime    flag
2017-08-03 12:10:00    0
2017-08-03 12:10:10    0
2017-08-03 12:10:20    1
2017-08-03 12:10:30    1
2017-08-03 12:10:40    1
2017-08-03 12:10:50    0
2017-08-03 12:11:00    0
2017-08-03 12:11:10    1
2017-08-03 12:11:20    1
2017-08-03 12:11:30    1
2017-08-03 12:11:40    0

#pandas读取转成json
from itertools import groupby
import pandas as pd

df = pd.read_table('a.txt', sep='\t')
lst = df.to_dict(orient='records')

for k, g in groupby(lst, lambda x: x['flag']):
    if k == 1:
        dt = [_['datetime'] for _ in list(g)]
        print k, min(dt), max(dt)
        
        
#结果
1 2017-08-03 12:10:20 2017-08-03 12:10:40
1 2017-08-03 12:11:10 2017-08-03 12:11:30

这篇关于python - 以固定时间频率增长的数据如何统计相同标志位的次数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆