【问题标题】:group timestamps by 20 second intervals以 20 秒为间隔对时间戳进行分组
【发布时间】:2017-04-08 00:08:38
【问题描述】:
from datetime import datetime, timedelta
d = datetime.now()
data = [d + timedelta(minutes=i) for i in range(100)]

# prepare and group the data
from itertools import groupby

def get_key(d):
    # group by 30 minutes
    k = d + timedelta(minutes=-(d.minute % 20))
    return datetime(k.year, k.month, k.day, k.hour, k.minute, 0)

g = groupby(sorted(data), key=get_key)

# print data
for key, items in g:
    print(key)
    for item in items:
        print('-', item)

我有一个大的时间戳数据集,我想把它分成 20 秒的窗口。上面的代码在几分钟内分组效果非常好,但我无法让它在 20 秒内分组

【问题讨论】:

  • timedelta 构造函数有一个关键字 secondsdatetime 有一个字段 second 那么为什么你的相同方法不起作用?
  • 我不确定我是否写了 k = d + td(seconds=-(d.second % 20)),它以 1 分钟的间隔将它们分组,我不明白为什么,有什么想法吗?
  • 可能是因为,当您在程序的第三行创建测试数据集时,您创建的所有数据点相隔一分钟。
  • 我尝试了 1 秒,但还是一样,好像忽略了秒数
  • 在您的get_key 函数中,最后一行的最后一个字段应该是秒。您始终将其设置为 0。应该是k.second

标签: python datetime itertools


【解决方案1】:

组需要有秒字段:

代码:

import datetime as dt

def get_key(d):
    # group by 20 seconds
    k = d - dt.timedelta(seconds=d.second % 20)
    return dt.datetime(k.year, k.month, k.day, k.hour, k.minute, k.second)

测试代码:

d = dt.datetime.now()
data = [d + dt.timedelta(seconds=i*5) for i in range(20)]

# prepare and group the data
import itertools as it

g = it.groupby(sorted(data), key=get_key)

# print data
for key, items in g:
    print(key)
    for item in items:
        print('-', item)

结果:

2017-04-07 17:51:00
- 2017-04-07 17:51:16.372000
2017-04-07 17:51:20
- 2017-04-07 17:51:21.372000
- 2017-04-07 17:51:26.372000
- 2017-04-07 17:51:31.372000
- 2017-04-07 17:51:36.372000
2017-04-07 17:51:40
- 2017-04-07 17:51:41.372000
- 2017-04-07 17:51:46.372000
- 2017-04-07 17:51:51.372000
- 2017-04-07 17:51:56.372000
2017-04-07 17:52:00
- 2017-04-07 17:52:01.372000
- 2017-04-07 17:52:06.372000
- 2017-04-07 17:52:11.372000
- 2017-04-07 17:52:16.372000
2017-04-07 17:52:20
- 2017-04-07 17:52:21.372000
- 2017-04-07 17:52:26.372000
- 2017-04-07 17:52:31.372000
- 2017-04-07 17:52:36.372000
2017-04-07 17:52:40
- 2017-04-07 17:52:41.372000
- 2017-04-07 17:52:46.372000
- 2017-04-07 17:52:51.372000

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    相关资源
    最近更新 更多