Рассчитайте разницу во времени в секундах - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть датафрейм, где последние два столбца относятся к времени часов. Тип данных обоих столбцов - String.

Пример данных выглядит так:

PROCESS_N   VAL     DATE        TIME_1      TIME_2
35324399    74.95   02/11/18    12:45:26    12:30:36
35324399    74.95   02/11/18    12:45:26    12:35:36
35334154    74.95   02/11/18    12:45:27    12:36:22
35338698    74.95   02/11/18    12:45:28    12:38:30
35338698    74.95   02/11/18    12:45:28    12:38:32
35347905    74.95   02/11/18    12:45:30    12:39:36
35367939    74.95   02/11/18    12:45:30    12:39:39
35371892    74.95   02/11/18    12:45:31    12:39:55

Я хочу заполнить другой столбец в конце Dataframe с разницей в TIME_1 и TIME_2 в Second.

Ответы [ 5 ]

0 голосов
/ 04 ноября 2018

Вы можете использовать pd.to_timedelta, а затем получить доступ к pd.Series.dt.seconds:

time_cols = ['TIME_1', 'TIME_2']
df[time_cols] = df[time_cols].apply(pd.to_timedelta)

df['Diff'] = (df['TIME_1'] - df['TIME_2']).dt.seconds

print(df)

   PROCESS_N    VAL      DATE   TIME_1   TIME_2  Diff
0   35324399  74.95  02/11/18 12:45:26 12:30:36   890
1   35324399  74.95  02/11/18 12:45:26 12:35:36   590
2   35334154  74.95  02/11/18 12:45:27 12:36:22   545
3   35338698  74.95  02/11/18 12:45:28 12:38:30   418
4   35338698  74.95  02/11/18 12:45:28 12:38:32   416
5   35347905  74.95  02/11/18 12:45:30 12:39:36   354
6   35367939  74.95  02/11/18 12:45:30 12:39:39   351
7   35371892  74.95  02/11/18 12:45:31 12:39:55   336
0 голосов
/ 04 ноября 2018

если вы знаете, как использовать фреймы данных, этот код поможет вам:

import datetime
import time

x1 = time.strptime('12:45:26,000'.split(',')[0], '%H:%M:%S')
x2 = time.strptime('12:30:36,000'.split(',')[0], '%H:%M:%S')
delta_x = datetime.timedelta(hours=x1.tm_hour - x2.tm_hour, minutes=x1.tm_min - 
x2.tm_min, seconds=x1.tm_sec - x2.tm_sec).total_seconds()
print(delta_x)
0 голосов
/ 04 ноября 2018

Разница в секундах с использованием timedelta -

df['Diff'] = (df['TIME_1']-df['TIME_2']).astype('timedelta64[s]')

выход

   PROCESS_N    VAL      DATE              TIME_1              TIME_2   Diff
0   35324399  74.95  02/11/18 1900-01-01 12:45:26 1900-01-01 12:30:36  890.0
1   35324399  74.95  02/11/18 1900-01-01 12:45:26 1900-01-01 12:35:36  590.0
2   35334154  74.95  02/11/18 1900-01-01 12:45:27 1900-01-01 12:36:22  545.0
3   35338698  74.95  02/11/18 1900-01-01 12:45:28 1900-01-01 12:38:30  418.0
4   35338698  74.95  02/11/18 1900-01-01 12:45:28 1900-01-01 12:38:32  416.0
5   35347905  74.95  02/11/18 1900-01-01 12:45:30 1900-01-01 12:39:36  354.0
6   35367939  74.95  02/11/18 1900-01-01 12:45:30 1900-01-01 12:39:39  351.0
7   35371892  74.95  02/11/18 1900-01-01 12:45:31 1900-01-01 12:39:55  336.0

Приведение к дате до расчета разницы в случае, если у вас str -

df['TIME_1'] = pd.to_datetime(df['TIME_1'],format='%H:%M:%S')
df['TIME_2'] = pd.to_datetime(df['TIME_2'],format='%H:%M:%S')
0 голосов
/ 04 ноября 2018

Посмотрите на преобразование обоих ваших чисел в объекты даты и времени и уменьшите одно из другого, например:

import datetime as dt

time1 = dt.datetime(2018,12,30,23,59,59)
time2 = dt.datetime(2018,12,31,23,59,59)

(time2-time1).total_seconds()

( источник )

0 голосов
/ 04 ноября 2018

Вы можете просто использовать to_datetime() метод для преобразования, а затем взять разницу:

df['diff'] = pd.to_datetime(df['TIME_1']) - pd.to_datetime(df['TIME_2'])

Если вы хотите сохранить его в считанные секунды, вы можете преобразовать его следующим образом:

df['diff'] = df['diff'].astype('timedelta64[s]')

Выход:

  PROCESS_N    VAL      DATE    TIME_1    TIME_2   diff
0   35324399  74.95  02/11/18  12:45:26  12:30:36  890.0
1   35324399  74.95  02/11/18  12:45:26  12:35:36  590.0
2   35334154  74.95  02/11/18  12:45:27  12:36:22  545.0
3   35338698  74.95  02/11/18  12:45:28  12:38:30  418.0
4   35338698  74.95  02/11/18  12:45:28  12:38:32  416.0
5   35347905  74.95  02/11/18  12:45:30  12:39:36  354.0
6   35367939  74.95  02/11/18  12:45:30  12:39:39  351.0
7   35371892  74.95  02/11/18  12:45:31  12:39:55  336.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...