Python:按时间间隔对结果进行分组

标签 python

我从腌制文件中加载了大量数据。数据是一个排序的元组列表,包含一个日期时间和一个像这样的 int

[ (datetime.datetime(2010, 2, 26, 12, 8, 17), 5594813L), 
  (datetime.datetime(2010, 2, 26, 12, 7, 31), 5594810L), 
  (datetime.datetime(2010, 2, 26, 12, 6, 4) , 5594807L),
  etc
]

我想根据一些时间间隔获得人口密度。比如我想抓取5分钟/1分钟/30秒周期内的记录条数。

执行此操作的最佳方法是什么?我知道我可以循环遍历列表中的每个实例,但一直在寻找更好的方法(如果存在的话)。

期望的输出是这样的:

2010-01-01 04:10:00  --- 5000
2010-02-04 10:05:00  --- 4000
2010-01-02 13:25:00  --- 3999

最佳答案

bisect.bisect是解决这个问题的另一种方法:

import datetime
import bisect
import collections

data=[ (datetime.datetime(2010, 2, 26, 12, 8, 17), 5594813L), 
  (datetime.datetime(2010, 2, 26, 12, 7, 31), 5594810L), 
  (datetime.datetime(2010, 2, 26, 12, 6, 4) , 5594807L),
]
interval=datetime.timedelta(minutes=1,seconds=30)
start=datetime.datetime(2010, 2, 26, 12, 6, 4)
grid=[start+n*interval for n in range(10)]
bins=collections.defaultdict(list)
for date,num in data:
    idx=bisect.bisect(grid,date)
    bins[idx].append(num)
for idx,nums in bins.iteritems():
    print('{0} --- {1}'.format(grid[idx],len(nums)))

关于Python:按时间间隔对结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344639/

相关文章:

python - 在当前目录安装python包

python - 这段 webapp2 代码有什么问题?

Python - 如果数组在其他数组的范围内

python - 使用 pytest 测试 pyqt 应用程序

python - Python 中的元组赋值,这是 Python 中的错误吗?

python - sympy 可以确定 expression 是否为正数吗?

python - Discord.py重写多服务器数据

python - GAN 判别器否认生成的模型

javascript - nil 的 Ruby 用例,相当于 Python None 或 JavaScript undefined

python - 是否可以使用 Python 中的 agate 模块将数据库保存到 MySQL?