Расчет разницы во времени между двумя рядами
Я пытаюсь рассчитать разницу во времени между двумя строками, используя shift()
, но я получаю неожиданную ошибку. Я могу упустить что-то очевидное
df['Delta'] = (df.index - df.index.shift(1))
Это утверждение производит ValueError: Cannot shift with no offset
, Что мне не хватает?
2 ответа
Решение
Две вещи:
- Если у вас есть DatetimeIndex, то
shift
сдвигает ваши данные с периодом времени. Если ваш индекс не имеет частоты, вы должны указать это для метода сдвига с помощьюfreq
ключевое слово (например,freq='s'
сдвинуть данные на одну секунду) - Вы не можете вычленить два индексных объекта, как это, так как это дает вам операцию набора различий: http://pandas.pydata.org/pandas-docs/stable/indexing.html
Если вы просто хотите получить разницу между двумя последовательными значениями в индексе, вы можете использовать diff
Метод (из серии, немного проще, чем сдвиг и вычитание):
df['index_col'] = df.index
df['Delta'] = df['index_col'].diff()
Возможно, это сбивает с толку то, что Series.shift и Index.shift не совсем делают одно и то же, последний только определенно определен для TimesSeries. Вероятно, проще всего добавить свой индекс в виде столбца.
df['index_col'] = df.index
df['Delta']=(df['index_col'] - df['index_col'].shift(1))