[英]Django Trunc data to 15 minutes
我目前正在使用 Django 的Truc
函數來聚合一天和一小時內的一些數據。
我想做同樣的事情,但超過 15 分鍾,而不是一個小時或一分鍾,但我無法弄清楚。
這是我當前查詢的示例:
data_trunc = data_qs.annotate(
start_day=Trunc('date_created', 'minute', output_field=DateTimeField()))
.values('start_day', 'content', 'device')
問題在於可以傳遞給Trunc
的'minutes'
參數。 據我所知,在'hour'
和'minutes'
沒有選擇。
如何將我的數據分組超過 15 分鍾,並為數據分組提供更大的時間跨度?
我知道之后我可以手動完成此操作,但我真的很想讓數據庫為我完成此操作,因為有一個大型數據集要計算,而這種方式是我所擁有的最有效的方式。
如果這是唯一的方法,盡管我願意接受有關解決此問題的最有效方法的建議。
謝謝你的幫助
編輯
我應該指定我不希望使用原始 SQL 來執行此操作並堅持使用 Django ORM 或本機 Python。
嗯,
由於我不想走使用 Postgres 函數的道路並堅持使用 ORM,因此我最終手動截斷了迭代所有項目的數據。
def trunc_minutes(raw_data, groupping=15):
truncated_arranged = []
current_slice = []
end_time = raw_data[0]['start_day'] + timedelta(minutes=groupping)
for d in raw_data:
if d['start_day'] <= end_time:
current_slice.append(d)
else:
truncated_arranged.append(current_slice)
current_slice = [d]
end_time = d['start_day'] + timedelta(minutes=groupping)
return truncated_arranged
這可能不是最快的方法,但它有效並且不需要原始 SQL。
編輯:在代碼的else
部分添加d
以便不會忘記在新切片中獲得的值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.