понимаю, что существует много подобных вопросов о вычитании для столбца панд, но мой сценарий довольно уникален
У меня есть 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]')