Как вычесть время при изменении даты в пандах? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть следующий датафрейм в пандах

    start_date        start_time        end_time
    2018-01-01        23:55:00          00:05:00
    2018-01-02        00:05:00          00:10:00
    2018-01-03        23:59:00          00:05:00

Я хочу рассчитать разницу во времени. Но, для 1-го и 3-го наблюдения есть изменение даты в end_time.

Как я могу сделать это в пандах?

В настоящее время я использую логику, в которой end_time меньше start_time Я создаю еще один столбец с именем end_date, где он увеличивает start_date на 1, а затем вычитает время.

Есть ли другой способ сделать это?

1 Ответ

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

Решение работает с timedeltas - если разница равна days равна -1, то добавьте один день:

df['start_time'] = pd.to_timedelta(df['start_time'])
df['end_time'] = pd.to_timedelta(df['end_time'])

d =  df['end_time'] - df['start_time']
df['diff'] = d.mask(d.dt.days == -1, d + pd.Timedelta(1, unit='d'))
print (df)
   start_date start_time end_time     diff
0  2018-01-01   23:55:00 00:05:00 00:10:00
1  2018-01-02   00:05:00 00:10:00 00:05:00
2  2018-01-03   23:59:00 00:05:00 00:06:00

Другое решение:

s = df['end_time'] - df['start_time']
df['diff'] = np.where(df['end_time'] < df['start_time'], 
                      s + pd.Timedelta(1, unit='d'), 
                      s)
print (df)

   start_date start_time end_time     diff
0  2018-01-01   23:55:00 00:05:00 00:10:00
1  2018-01-02   00:05:00 00:10:00 00:05:00
2  2018-01-03   23:59:00 00:05:00 00:06:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...