Столбец Python datetime вычитать datetime - PullRequest
0 голосов
/ 23 ноября 2018

понимаю, что существует много подобных вопросов о вычитании для столбца панд, но мой сценарий довольно уникален

У меня есть 2 набора данных, которые оба включают дату и время.Моя программа требует, чтобы я соответствовал этому времени 2 даты, поэтому я использовал merge_asof, чтобы соответствовать ближайшему времени.После сопоставления данных мне нужно будет найти разницу во времени между этими двумя наборами данных.

EndTime,Datetime
3/10/2010 0:00:33, 3/10/2010 0:00:26
3/10/2010 0:01:15, 
3/10/2010 0:01:30,
3/10/2010 0:02:09, 3/10/2010 0:01:36
3/10/2010 0:02:50,
3/10/2010 0:05:09,
3/10/2010 0:06:00, 3/10/2010 0:05:48

Часть UNIQUE будет состоять в том, что я хотел бы использовать Datetime вычитать за 1 строку до конечного времени (например, последняя строка 3/10/2010 0:05:48 - 2-ая последняя строка 3.10.2010 0:05:09 = 39 секунд)

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

EndTime,Datetime,SecondsDiff
3/10/2010 0:00:33, 3/10/2010 0:00:26, *not sure how to compute this but not important for 1st row of data*
3/10/2010 0:01:15,,
3/10/2010 0:01:30,,
3/10/2010 0:02:09, 3/10/2010 0:01:36,6
3/10/2010 0:02:50,,
3/10/2010 0:05:09,,
3/10/2010 0:06:00, 3/10/2010 0:05:48,39

Я пыталсянекоторые методы, которые привели к некоторой ошибке, пожалуйста, советуйте!

Как и при сопоставлении данных, это вызывает дублирование, поэтому я использую

dm.loc[(dm['Datetime'].notnull())&(dm.duplicated('Datetime')==True),'Datetime'] = ' '

, чтобы получить пустое пространство, которое не вызывает дублирование, но дает мне "Ошибка синтаксического анализа строки даты и времени "" в позиции 1 "

-

Я также попытался указать дубликаты как 0 и преобразовать тип даты и времени, но вызывает

error ufunc subtract cannot use operands with types dtype('O') anddtype('<M8[ns]')

поэтому я попробовал описанный ниже метод, но в результате мой столбец даты и времени стал только датой, а разница в секундах была полностью отключена

dm.loc[(dm['Datetime'].notnull())&(dm.duplicated('Datetime')==True),'Datetime'] = 0
dm['EndTime'] = dm['EndTime'].values.astype('datetime64')
dm['Datetime'] = dm['Datetime'].values.astype('datetime64')
dm['Seconds'] = (dm.Datetime - 
dm.EndTime.shift(-1)).astype('timedelta64[s]')

1 Ответ

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

IIUC вы можете использовать:

print (df)

             EndTime            Datetime
0  3/10/2010 0:00:33   3/10/2010 0:00:26
1  3/10/2010 0:01:15                    
2  3/10/2010 0:01:30                 NaN
3  3/10/2010 0:02:09   3/10/2010 0:01:36
4  3/10/2010 0:02:50                 NaN
5  3/10/2010 0:05:09                 NaN
6  3/10/2010 0:06:00   3/10/2010 0:05:48

df.Datetime = pd.to_datetime(df.Datetime, errors='coerce')
df.EndTime = pd.to_datetime(df.EndTime, errors='coerce')

df['SecondsDiff'] = df.Datetime.sub(df.EndTime.shift()).dt.seconds

print (df)

              EndTime            Datetime  SecondsDiff
0 2010-03-10 00:00:33 2010-03-10 00:00:26          NaN
1 2010-03-10 00:01:15                 NaT          NaN
2 2010-03-10 00:01:30                 NaT          NaN
3 2010-03-10 00:02:09 2010-03-10 00:01:36          6.0
4 2010-03-10 00:02:50                 NaT          NaN
5 2010-03-10 00:05:09                 NaT          NaN
6 2010-03-10 00:06:00 2010-03-10 00:05:48         39.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...