首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python itertools.groupby datetime系列(按小时)

python itertools.groupby datetime系列(按小时)
EN

Stack Overflow用户
提问于 2018-12-07 03:02:44
回答 1查看 583关注 0票数 -1

这项任务非常简单,我能够部分完成它:

from dateutil.parser import parse

    for timestamp, grp in itertools.groupby(transactions, lambda x: parse(x['date']).hour):
        group = list(grp)
        logger.info(f'{timestamp} : {len(group)}')

我得到了hour:count数组。

但是,我希望得到一个datetime:count数组(其中datetime对象表示一个小时)。

是否必须在lambda x函数中构建datetime对象?(例如,获取x['date']).hourx['date']).dayx['date']).month等并使用这些值创建一个新的datetime ),还是有其他方法?

示例输入(事务)包含周/月的数据:

[
 {
  'date': '2018-12-04T15:34:40+00:00',
  'data': 'blabla'
 },
 {
  'date': '2018-12-04T15:38:40+00:00',
  'data': 'blabla'
 },
 {
  'date': '2018-12-04T15:45:40+00:00',
  'data': 'blabla'
 },
]

示例输出:

2018-12-04 13:00:00+00:00 : 6
2018-12-04 14:00:00+00:00 : 1
2018-12-04 15:00:00+00:00 : 2

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-12-07 03:28:41

因为我是collections.Counter的粉丝:

from dateutils.parser import parse
from collections import Counter

counter = Counter()
for transaction in transactions:
    counter.update(str(parse(transaction['date'][:-12])),)
for key,value in sorted(counter.items()):
    print(f'{key}: {value}')

下面是一个使用列表理解的解决方案:

from dateutils.parser import parse
from collections import Counter

counter = Counter([str(parse(x['date'][:-12])) for x in transactions]) 

for key,value in sorted(counter.items()):
    print(f'{key}: {value}')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53658048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档