从 Python groupby 填充日期

Posted

技术标签:

【中文标题】从 Python groupby 填充日期【英文标题】:Fill dates from Python groupby 【发布时间】:2011-03-01 12:25:51 【问题描述】:

我有一组新闻文章对象,我希望按不同月份显示这些对象。我使用itertools.groupby 创建了一个按以下方式排序的 Python 对象列表:

news_grouped = [
    'date': key, 'list': list(val)
    for key, val in groupby(obj_list, 
                            (lambda v: datetime.datetime(v.pub_date.year, 
                                                         v.pub_date.month, 1)))
]

所以我最终得到了一个类似的集合:

['date': datetime.datetime(2011, 1, 1, 0, 0), 
  'list': [<News: A January Article>, <News: Another January Article>], 
 'date': datetime.datetime(2010, 12, 1, 0, 0), 
  'list': [<News: Happy Xmas>], 
 'date': datetime.datetime(2010, 10, 1, 0, 0), 
  'list': [<News: Halloween>], 
 'date': datetime.datetime(2010, 1, 1, 0, 0), 
  'list': [<News: Old old old Jan 2010>]]

我想填充 news_grouped 集合,使其在最早的文章和今天的日期之间的每个月包含一个条目,空的只有一个空列表。

我意识到我可以通过从最旧的日期迭代到最新的日期并填充集合来做到这一点,但我对此并不完全满意,而且我想它也不是很有效。

有没有更优雅的方法来解决这个问题?有人能指点我吗?

(我实际上正在使用 Django 并且正在使用重组,但似乎我最好在模板之外的 python 中解决这个问题 - 我当然可能是错的)

非常感谢。

卢多。

【问题讨论】:

这种复杂的数据结构有什么具体原因吗?为什么不使用以月份为键、新闻项目列表为值的字典? 我基于 Django 重组模板标签。我存储整个日期的原因是我可以在模板中以不同的格式显示年份和月份。 【参考方案1】:

根据 Space_C0wb0y 的建议,如果您喜欢使用有序的字典,请使用自 2.7 以来的集合模块的一部分。

    获取最旧的文章 通过以月为单位从最旧的.pub_date 循环到今天,创建映射到空列表的 dict 键 遍历所有项目并附加到字典中的适当列表

【讨论】:

我使用了 OrderedDict。我只是想可能有一些比自己填充更整洁的方法。谢谢。

以上是关于从 Python groupby 填充日期的主要内容,如果未能解决你的问题,请参考以下文章

如何用零填充 pandas groupby 列表的缺失日期?

根据不均匀的日期重新索引熊猫数据框,然后用 groupby 和空白填充某些值

Python数据聚合和分组运算-GroupBy Mechanics

python pandas:groupby中2个日期之间的差异

python pandas groupby plot,排序日期为 xtick

Python pandas:在groupby数据框中插入缺失日期、时间序列的行