Как правильно заказать время питона - PullRequest
0 голосов
/ 12 мая 2018

Извините за смутное название.Эту проблему легче показать.

У меня есть кадр данных, упорядоченный по времени.Я хочу преобразовать это в общее количество секунд.Проблема в том, что время идет с 08:00:00 до 03:00:00.Таким образом, общее количество секунд в порядке, пока время не перейдет с 23:59:59 до 00:00:00.

Пример некоторых временных меток:

['23:45:00'
'23:45:00'
'23:47:00'
'23:49:00'
'23:55:00'
'00:10:00'
'00:10:00'
'00:10:00'
'01:05:00'
'01:08:00'
'01:10:00'
'01:15:00'
'02:05:00'
'02:07:00'
'03:05:00'
'03:10:00'
'03:15:00'
'03:25:00']

Таким образом, общее количество секунд в порядке до полуночи.Тогда это начинается снова.На данный момент я исправляю это, добавляя 24 часа час после полуночи.

df['Time'] = pd.DatetimeIndex(df['Time']) + timedelta(hours=24)

Все это не очень эффективно, если вам нужно проиндексировать соответствующие строки, а затем добавить n часов.

Я не уверен, полезно ли это, но яНиже приведен код, который выдает случайные временные метки:

import pandas as pd
import random
from datetime import timedelta

def randomTime():

    rtime = int(random.random()*86400)

    hours   = int(rtime/3600)
    minutes = int((rtime - hours*3600)/60)
    seconds = rtime - hours*3600 - minutes*60

    time_string = '%02d:%02d:%02d' % (hours, minutes, seconds)
    return time_string

time = [randomTime() for _ in range(8)]

k = 5
N = 8

d = ({'Time' : (time)})

df = pd.DataFrame(data=d)

1 Ответ

0 голосов
/ 12 мая 2018

Я полностью согласен с комментарием @ abarnet о том, что вы должны добавлять 24, а не 25 часов каждый раз, когда происходит падение.

Эффективный способ найти приращение, используя приведенный выше пример, может быть

>>> (pd.to_datetime(df.Time) < pd.to_datetime(df.Time).shift(1)).cumsum() * pd.Timedelta(hours=24)
0    0 days
1    0 days
2    0 days
3    0 days
4    0 days
5    1 days
6    1 days
7    1 days
8    1 days
9    1 days
10   1 days
11   1 days
12   1 days
13   1 days
14   1 days
15   1 days
16   1 days
17   1 days
Name: Time, dtype: timedelta64[ns]

.

  • проверяет, падает ли время относительно строки перед
  • находит кумулятивное число раз, когда это произошло
  • переводит его в интервал времени в 24 часа для количества раз
...