У меня есть фрейм данных, содержащий временной ряд, проиндексированный по времени, но с нерегулярными временными дельтами, как показано ниже
df
time x
2018-08-18 17:45:08 1.4562
2018-08-18 17:46:55 1.4901
2018-08-18 17:51:21 1.8012
...
2020-03-21 04:17:19 0.7623
2020-03-21 05:01:02 0.8231
2020-03-21 05:02:34 0.8038
Я хочу получить дневную разницу между двумя (хронологически) ближайшими значения , т.е. ближайшее время следующего дня. Например, если у нас есть образец во время 2018-08-18 17:45:08, а на следующий день у нас нет образца в то же время, но ближайший образец находится, скажем, в 2018-08-19 17:44:29, тогда я хочу получить разницу в x
между этими двумя временами. Как это возможно в pandas?
- Всегда будет выборка для каждого дня между первым и последним днями временного ряда.
- Следует учитывать разницу as (текущий x) - (прошедший x) например x_day2 - x_day1
- Первые
n
строки вывода будут иметь NaN
с учетом того, как берется разница, где n
- количество выборок в первый день
РЕДАКТИРОВАТЬ: Приведенный ниже код работает, если временные дельты являются регулярными
def get_daily_diff(data):
"""
Calculate daily difference in time series
Args:
data (pandas.Series): a pandas series of time series values indexed by pandas.Timestamp
Returns:
pandas.Series: daily difference in values
"""
df0 = data.index.searchsorted(data.index - pd.Timedelta(days=1))
df0 = df0[df0 > 0]
df0 = pd.Series(data.index[df0 - 1], index=data.index[data.shape[0] - df0.shape[0]:])
out = data.loc[df0.index] - data.loc[df0.values]
return out
Однако, если используются нерегулярные временные дельты, ValueError
выбрасывается при определении переменной out
, поскольку мы получаем несоответствие длины между data.loc[df0.index]
и data.loc[df0.values]
. Таким образом, проблема состоит в том, чтобы расширить эту функцию, чтобы она работала, когда временные дельты нерегулярны.