Обнаружение последовательных дат в серии pandas DatetimeIndex

У меня есть pandas Series of DatetimeIndex в формате даты (YYYY-MM-DD), и я хочу пометить последовательные регионы, где каждый индекс является последовательным по отношению к дню, поэтому, если в серии Datetime отсутствует дата, я хочу ее обнаружить, то есть:

...
2005-01-15
2005-01-16
2005-01-17
2005-02-15
2005-02-16
...

где очевиден разрыв в количестве пропущенных дней между 17 января 2005 г. и 15 февраля 2005 г.

Не удалось найти простой способ сделать это с помощью pandas, хотя я ожидаю некоторую вспомогательную функцию, о которой я не знаю. В более общем плане также будет оценено решение numpy.


@smci, я не знаю, что такое dput(), но вот один из способов сгенерировать образцы данных:

import pandas as pd
import numpy as np

data = pd.concat([
    pd.Series(np.random.randn(3), pd.date_range('2005-01-15', '2005-01-17')),
    pd.Series(np.random.randn(3), pd.date_range('2005-02-15', '2005-02-17'))
])

person theta    schedule 28.12.2014    source источник
comment
Спасибо за добавление примера. Дох! dput() из R, а не из панд, мой мозг ошибся.   -  person smci    schedule 28.12.2014


Ответы (2)


Попробуйте что-нибудь вроде:

data.index - data.index.shift(1, freq=pd.DateOffset(1))

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

person smci    schedule 28.12.2014
comment
Теперь это похоже на набор различий между индексным индексом и смещенным индексом, а это не то, что мы здесь ищем. Как вы пишете это в новых пандах? - person Chris Withers; 27.07.2016
comment
@ChrisWithers: вы имеете в виду Python 3.x или Pandas 0.17.x? Если мы сможем сузить круг вопросов, когда произошло изменение, это поможет ... - person smci; 29.07.2016
comment
Python 2.x, Pandas 0.18.x - person Chris Withers; 29.07.2016

Ответ Smci не сработал для обнаружения недостающей даты, поскольку задавался вопрос.

Я использую DataFrame.asfreq ('D') для обнаружения недостающих значений. Эти пропущенные даты будут перечислены, но для их соответствующих значений будет отображаться NAN. Например:

df1 = df.asfreq('D)
missing_dates=df1[df1.Column.isnull()]
person Sarah    schedule 19.03.2019