如何根据django查询中的日期获得等距离的行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据django查询中的日期获得等距离的行?相关的知识,希望对你有一定的参考价值。

我正在编写一个django应用程序,我从数据库中收集数据。我的模型包含一个名为date的日期字段。

我想把日期放到折线图中。因为表格中可能有数百个日期。我想通过从整个表中选择10个相等距离的日期来缩小数据。

例如,如果我的行包含日期1/09/2013 - 20/09/2013,我想得到:

1/09/2013
3/09/2013
5/09/2013
7/09/2013
9/09/2013
11/09/2013
13/09/2013
15/09/2013
17/09/2013
19/09/2013

这是我的模型:

class Model(models.Model):
    date = models.DateField()

这是我的查询:

data = Model.objects.all()

我想以最安全的方式做到这一点,因为我的数据库中的日期可能是不规则的。如何基于data.date分割数据?是否有django的预建功能?任何建议,将不胜感激。

答案

尝试:只需获取第一个和最后一个日期之间的差异,除以10即可获得2个记录之间的差异。然后循环获取10条记录。

data = Model.objects.all().order_by('date')

n = data.length()
date_first = data[0].date
date_last = data[n].date

days_diff = (date_last-date_first).days

diff= days_diff/10;

# Now store date in a list

date=[]
for i in range(0,10)
     date.insert(i,date_first + i* datetime.timedelta(days=diff) )
另一答案

我知道这个问题有一个答案,但最可靠,无错误的方法是依靠内置功能的pandas

>>> import pandas as pd
>>> start = pd.Timestamp('2013-9-1')
>>> end = pd.Timestamp('2013-9-20')
>>> periods = 10
>>> freq = (end - start + pd.Timedelta(days=1)) // periods
>>> dates = pd.date_range(start, periods=periods, freq=freq)
>>> dates
DatetimeIndex(['2013-09-01', '2013-09-03', '2013-09-05', '2013-09-07',
               '2013-09-09', '2013-09-11', '2013-09-13', '2013-09-15',
               '2013-09-17', '2013-09-19'],
              dtype='datetime64[ns]', freq='2D')
>>> dates.to_pydatetime().tolist()
[datetime.datetime(2013, 9, 1, 0, 0),
 datetime.datetime(2013, 9, 3, 0, 0),
 datetime.datetime(2013, 9, 5, 0, 0),
 datetime.datetime(2013, 9, 7, 0, 0),
 datetime.datetime(2013, 9, 9, 0, 0),
 datetime.datetime(2013, 9, 11, 0, 0),
 datetime.datetime(2013, 9, 13, 0, 0),
 datetime.datetime(2013, 9, 15, 0, 0),
 datetime.datetime(2013, 9, 17, 0, 0),
 datetime.datetime(2013, 9, 19, 0, 0)]

以上是关于如何根据django查询中的日期获得等距离的行?的主要内容,如果未能解决你的问题,请参考以下文章

使用 django 查询返回活动时区中的日期时间

如何根据最近的行日期复制 DataFrame 中的行

如何根据列中的最新日期聚合 pandas 数据框中的行?

如何使用格式化的日期时间字段获取 django 查询集结果

在 django 查询集中的两个日期之间有可能获得几个月?

sqlserver如何根据当前日期获得上月某一天的日期