Средняя разница между датами в Python - PullRequest
2 голосов
/ 07 октября 2008

У меня есть серия объектов datetime, и я хочу вычислить среднее значение дельты между ними.

Например, если введено значение (2008-10-01 12:15:00, 2008-10-01 12:25:00, 2008-10-01 12:35:00), то среднее значение дельты будет равно 00:10:00 или 10 минутам.

Любые предложения о том, как рассчитать это с помощью Python?

Ответы [ 5 ]

11 голосов
/ 07 октября 2008

Что касается алгоритмов, то это легко. Просто найдите максимальное и минимальное время, возьмите разницу и разделите на число времени, которое вы посмотрели.

Если у вас есть массив a datetime, вы можете сделать:

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

чтобы вернуть среднюю разницу.

РЕДАКТИРОВАТЬ: исправлена ​​ошибка off-by-one

3 голосов
/ 08 октября 2008

Скажите 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)

Это действительно усреднит ваши дельты вместе.

2 голосов
/ 07 октября 2008

Поскольку в вашем примере вы, кажется, выбрасываете 20-минутную дельту между временами 1 и 3, я бы сказал, что вам следует просто отсортировать список дат и времени, сложить дельты между соседними временами, а затем разделить на n-1. .

У вас есть какой-нибудь код, которым вы можете поделиться с нами, чтобы мы могли помочь вам отладить его?

1 голос
/ 07 октября 2008

Вы можете вычесть каждую последующую дату из предыдущей (в результате получается объект timedelta, который представляет разницу в днях, секундах). Затем вы можете усреднить объекты timedelta, чтобы найти свой ответ.

0 голосов
/ 15 октября 2009

небольшое уточнение

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...