我有一系列日期时间对象,想计算它们之间的平均增量。
例如,如果输入是 (2008-10-01 12:15:00, 2008-10-01 12:25:00, 2008-10-01 12:35:00)
,则平均增量将正好为 00:10:00 或 10 分钟。
关于如何使用 Python 计算它的任何建议?
就算法而言,这很容易。 只需找到最大和最小日期时间,取差值,然后除以您查看的日期时间数即可。
如果你有一个日期时间数组,你可以做:
mx = max(a)
mn = min(a)
avg = (mx-mn)/(len(a)-1)
以取回平均差额。
编辑:修复了关闭一个错误
说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)
这确实会将您的增量平均在一起。
由于您在示例中似乎抛出了 20 和 3 之间的 3 分钟增量,因此我认为您应该对日期时间列表进行排序,将相邻时间之间的增量相加,然后除以 n-1。
您是否有任何代码可以与我们共享,以便我们帮助您调试它?
您可以从前一个日期中减去每个连续的日期(生成一个 timedelta 对象,该对象表示以天、秒为单位的差异)。 然后,您可以对时间增量对象求平均值以找到答案。
小澄清
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