【问题标题】:Group by 2 keys with only month in second key按 2 个键分组,第二个键只有月份
【发布时间】:2016-09-03 19:11:26
【问题描述】:

我正在尝试按我的 dict 列表中的 2 个键进行分组,第二个键是 datetime.date。我需要按昵称和月份进行分组,然后进行一些求和、条件求和等。

在 SQL 中类似于

select 
    rw_worker_nick
    ,date_trunc( 'month', rw_date ) as month
    ,sum(rw_end - rw_start)  as work_time
from 
results_woshi  
where 
rw_script = 93 
group by
  rw_worker_nick
 ,date_trunc( 'month', rw_date ) 
 order by month

键与 db 列同名

我认为在 python 中比在 db 级别更容易执行的条件还有一些

这是我目前的代码,但我不知道如何按月分组

grouper = itemgetter("rw_worker_nick", "rw_date")
result = []

from itertools import groupby
from pprint import pprint



for key, grp in groupby(sorted(summary, key = grouper), grouper):
    temp_dict = dict(zip(["rw_worker_nick", "rw_date"], key))
    result.append(temp_dict)

【问题讨论】:

    标签: python postgresql date group-by grouping


    【解决方案1】:

    与其依赖itemgetter,不如编写自己的忽略日期中的日期的键函数:

    grouper = lambda x: (x["rw_worker_nick"], x["rw_date"].replace(day=1))
    

    这会将每个日期转移到其月份的第一天。如果您想对不同年份的同一月份的项目进行分组,可以使用x["rw_date"].month 而不是replace 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多