Как выполнить прокатку агрегата с запаздыванием по времени?

#pandas

Вопрос:

Я хотел бы выполнить задачу, называемую прокаткой агрегата с запаздыванием… Начиная с этого фрейма данных

 import pandas as pd

import numpy as np

df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},
                   index = [pd.Timestamp('20130101 09:00:00'),
                           pd.Timestamp('20130101 09:00:02'),
                            pd.Timestamp('20130101 09:00:03'),
                            pd.Timestamp('20130101 09:00:05'),
                            pd.Timestamp('20130101 09:00:06')])
 
    B
2013-01-01 09:00:00     0.0
2013-01-01 09:00:02     1.0
2013-01-01 09:00:03     2.0
2013-01-01 09:00:05     NaN
2013-01-01 09:00:06     4.0
 

Мне нужно было бы выполнить

 df.rolling("3s excluding first 1s").max() # or more precisely df.rolling("(-3s,-1s]").max() 
#closed on -1s, open on -3s
 

Мое реальное приложение включало чрезвычайно большой кадр данных, где временная метка также не имела постоянного интервала, и у меня также был идентификатор. Так что мое реальное приложение-это действительно групповой прокатный агрегат с запаздыванием. (подход сдвига/подход merge_as_of в моем случае не сработает…)

Ожидаемый результат таков

     B
2013-01-01 09:00:00     NaN
2013-01-01 09:00:02     0.0 
2013-01-01 09:00:03     1.0
2013-01-01 09:00:05     2.0
2013-01-01 09:00:06     NaN
 

Комментарии:

1. можете ли вы rolling aggregation with lag дать более четкое определение?

2. shift approach/merge_as_of approach won't work in my case. почему нет? Если ваши текущие предоставленные данные не точно отражают трудности работы с вашим реальным набором данных, возможно, будет хорошей идеей обновить ваш пример, чтобы он был более репрезентативным.