Я хочу применить функцию смещения скользящего окна к DataFrame с индексом даты. Вот пример:
rng = pd.date_range('2017-01-03', periods=20, freq='W')
df = pd.DataFrame(np.random.randn(20), rng, columns=['Val'])
df.index.name = 'Date'
r = df.rolling('15D')
Это создает DataFrame df
, например:
Val
Date
2017-01-08 0.592210
2017-01-15 -1.243938
2017-01-22 -0.713988
2017-01-29 1.554777
...
Но я не могу понять, как увидеть дату, связанную с каждым Val, в любой функции, которую я применяю к окну Rolling
. Например, следующее:
def f(data=None): # I really want to reference the Date associated with each Val in here!
print('f(%s) data=%s' % (str(type(data)), data))
return 1
r.apply(lambda x: f(x))
показывает, что все, что я вижу, это ndarray
для каждого вызова:
f(<class 'numpy.ndarray'>) data=[0.59220959]
f(<class 'numpy.ndarray'>) data=[ 0.59220959 -1.24393841]
f(<class 'numpy.ndarray'>) data=[ 0.59220959 -1.24393841 -0.71398767]
f(<class 'numpy.ndarray'>) data=[-1.24393841 -0.71398767 1.55477737]
...
Есть ли способ вызвать скользящее окно смещения времени в DataFrame таким образом, чтобы функция агрегации видела индекс, связанный с каждым значением в окне?
Например, чтобы я мог применить функцию, которая видит что-то вроде:
f(<class 'DataFrame'>) data=[{2017-01-08, 0.59221}]
f(<class 'DataFrame'>) data=[{2017-01-08, 0.59221}, {2017-01-15, -1.243938}]
...