Следуя этому вопросу пользовательской функции Python с помощью функции roll_apply для pandas, об использовании rolling_apply
. Хотя я продвигался с помощью своей функции, я изо всех сил стараюсь иметь дело с функцией, для которой требуется два или более столбца:
Создание той же настройки, что и раньше
import pandas as pd
import numpy as np
import random
tmp = pd.DataFrame(np.random.randn(2000,2)/10000,
index=pd.date_range('2001-01-01',periods=2000),
columns=['A','B'])
Но слегка изменив функцию, чтобы взять два столбца.
def gm(df,p):
df = pd.DataFrame(df)
v =((((df['A']+df['B'])+1).cumprod())-1)*p
return v.iloc[-1]
Выдается следующая ошибка:
pd.rolling_apply(tmp,50,lambda x: gm(x,5))
KeyError: u'no item named A'
Я думаю, что это потому, что вход для лямбда-функции является ndarray длины 50 и только первого столбца и не принимает в качестве входных данных два столбца. Есть ли способ получить оба столбца в качестве входов и использовать его в функции rolling_apply
.
Снова любая помощь будет принята с благодарностью...