Pandas DataFrame Рассчитать разницу во времени между 2 столбцами в определенном диапазоне времени - PullRequest
0 голосов
/ 12 ноября 2018

Я хочу рассчитать разницу во времени между двумя столбцами в определенном диапазоне времени.

Я пытаюсь df.between_time, но он работает только с индексом.

Ex. Диапазон времени: между 18.00 - 8.00

Данные:

             start               stop
0   2018-07-16 16:00:00  2018-07-16 20:00:00
1   2018-07-11 08:03:00  2018-07-11 12:03:00
2   2018-07-13 17:54:00  2018-07-13 21:54:00
3   2018-07-14 13:09:00  2018-07-14 17:09:00
4   2018-07-20 00:21:00  2018-07-20 04:21:00
5   2018-07-20 17:00:00  2018-07-21 09:00:00

Ожидаемый результат:

          start                  stop           time_diff
0   2018-07-16 16:00:00  2018-07-16 20:00:00    02:00:00
1   2018-07-11 08:03:00  2018-07-11 12:03:00    0
2   2018-07-13 17:54:00  2018-07-13 21:54:00    03:54:00
3   2018-07-14 13:09:00  2018-07-14 17:09:00    0
4   2018-07-20 00:21:00  2018-07-20 04:21:00    04:00:00
5   2018-07-20 17:00:00  2018-07-21 09:00:00    14:00:00

Примечание: Если time_diff> 1 days, я уже имею дело с этим делом.

Вопрос: Должен ли я создать функцию для этого или есть встроенная функция pandas для этого? Буду признателен за любую помощь или руководство.

1 Ответ

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

Я думаю, что это может быть решением

tmp = pd.DataFrame({'time1': pd.to_datetime(['2018-07-16 16:00:00', '2018-07-11 08:03:00', 
                                             '2018-07-13 17:54:00', '2018-07-14 13:09:00', 
                                             '2018-07-20 00:21:00', '2018-07-20 17:00:00']),
                    'time2': pd.to_datetime(['2018-07-16 20:00:00', '2018-07-11 12:03:00', 
                                             '2018-07-13 21:54:00', '2018-07-14 17:09:00', 
                                             '2018-07-20 04:21:00', '2018-07-21 09:00:00'])})
time1_date = tmp.time1.dt.date.astype(str)
tmp['rule18'], tmp['rule08'] = pd.to_datetime(time1_date + ' 18:00:00'), pd.to_datetime(time1_date + ' 08:00:00')
# if stop exceeds 18:00:00, compute time difference from this hour 
tmp['time_diff_rule1'] = np.where(tmp.time2 > tmp.rule18, (tmp.time2 - tmp.rule18), (tmp.time2 - tmp.time1))
# rearrange the dataframe with your second rule
tmp['time_diff_rule2'] = np.where((tmp.time2 < tmp.rule18) & (tmp.time1 > tmp.rule08), 0, tmp['time_diff_rule1'])

  time_diff_rule1    time_diff_rule2  
0 02:00:00           02:00:00  
1 04:00:00           00:00:00  
2 03:54:00           03:54:00  
3 04:00:00           00:00:00  
4 04:00:00           04:00:00  
5 15:00:00           15:00:00  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...