Расчет разницы во времени между двумя рядами

Я пытаюсь рассчитать разницу во времени между двумя строками, используя 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))
Другие вопросы по тегам