Я пытаюсь добавить столбец в фрейм данных, который указывает разницу во времени каждого индекса строки и фиксированную метку времени. Кадр данных состоит из datetimeindex и некоторых строковых столбцов.Операция Timedelta дает неправильные результаты
Я использую
d["diff"] = d.index-t0
для вычисления указанной разницы во времени. Из-за предварительной фильтрации наибольшее возможное значение разности должно составлять от 10 до 20 секунд. Тем не менее, я часто получаю diffs чуть ниже дня (на 1-10 с меньше), хотя фактическая разница составляет примерно 5 секунд.
Я читал, что предыдущая версия панд имела проблемы именно с этим, но, как говорили, она была долго исправлена.
Моим обходным путем было бы скопировать индекс, передать его в int64, отбросить t0 до int64, вычесть t0 из всех строк, а затем преобразовать столбец diff обратно в timedeltas, но это кажется крайне неэффективным и уродливым.
PS: Это происходит на OS X и Debian 8, используя pandas 0.16.0.
EDIT: В соответствии с просьбой, один образец:
2013-12-12 13:50:48 # t0
timestamp
2013-12-16 13:50:52 4 days 00:00:04
Name: diff, dtype: timedelta64[ns]
И я только что заметил, дата полностью выключен, я использую indexer_between_time(), чтобы получить индексы и смотрели только на время, а не дата. Это еще более запутанно.
indices = df.index.indexer_between_time(start_time=index,end_time=index+DateOffset(seconds=t_offset))
Пример с образцовыми данными был бы полезен. – Zero
Знаете ли вы, как негативно отпечатаны негативные timedeltas? 'pd.Timedelta (seconds = -0.5)' дает 'Timedelta ('- 1 days +23: 59: 59.500000')', потому что он всегда пытается сохранить значение секунд положительным при печати. Это то, что вы видите, или что-то еще? – Marius
Добавлен образец и твист сюжета. – AdmiralSnackbar