【问题标题】:Average difference between dates in PythonPython中日期之间的平均差异
【发布时间】:2008-10-07 18:18:48
【问题描述】:

我有一系列日期时间对象,想计算它们之间的平均增量。

例如,如果输入是 (2008-10-01 12:15:00, 2008-10-01 12:25:00, 2008-10-01 12:35:00),那么平均增量正好是 00:10:00,即 10 分钟。

关于如何使用 Python 进行计算有什么建议吗?

【问题讨论】:

  • 如果您发布您的代码,我们会更有帮助。
  • 甚至不清楚这里要寻找什么 - 平均成对增量?

标签: python algorithm datetime


【解决方案1】:

就算法而言,这很简单。只需找到最大和最小日期时间,取差值,然后除以您查看的日期时间数。

如果你有一个日期时间数组,你可以这样做:

mx = max(a)
mn = min(a)
avg = (mx-mn)/(len(a)-1)

取回平均差。

编辑:修复了一个错误

【讨论】:

  • 不应该是 (len(c) - 1) 吗?
  • 不应该是 (len(a) - 1) 吗? - 因为其他引用似乎是 'a' 而不是 'c'...
  • 你能划分timedelta对象吗?
  • 是的,这里的分区似乎做得很好。
  • @Evgeny 不,中位数将是排序时间增量列表中间的时间增量(或者如果时间增量的数量是偶数,则中间两个的平均值)。例如对于[1, 3, 19, 27, 28, 33, 34] 的值列表,差异的平均值为 5.5,而差异的中位数为 3.5。
【解决方案2】:

a是你的名单

sumdeltas = timedelta(seconds=0)
i = 1
while i < len(a):
    sumdeltas += a[i-1] - a[i]
    i = i + 1

avg_delta = sumdeltas / (len(a) - 1)

这确实会将您的增量平均在一起。

【讨论】:

    【解决方案3】:

    由于您似乎在示例中丢弃了时间 1 和 3 之间的 20 分钟增量,我想说您应该只对日期时间列表进行排序,将相邻时间之间的增量相加,然后除以 n-1 .

    您有任何代码可以与我们分享,以便我们帮助您调试吗?

    【讨论】:

      【解决方案4】:

      您可以从前一个日期中减去每个连续的日期(产生一个 timedelta 对象,它表示以天、秒为单位的差异)。然后,您可以平均 timedelta 对象以找到您的答案。

      【讨论】:

      • 是的,这就是我想要做的。平均似乎引起了问题;可能是我的 Python 错误。想法?
      【解决方案5】:

      小说明

      from datetime import timedelta
      
      def avg(a):
          numdeltas = len(a) - 1
          sumdeltas = timedelta(seconds=0)
      
          i = 1
          while i < len(a):
              delta = abs(a[i] - a[i-1])
              try:
                  sumdeltas += delta
              except:
                  raise
              i += 1
          avg = sumdeltas / numdeltas
          return avg
      

      【讨论】:

        猜你喜欢
        • 2015-11-22
        • 1970-01-01
        • 2019-01-04
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        • 2022-08-21
        • 2019-09-02
        • 1970-01-01
        相关资源
        最近更新 更多