Я пытаюсь рассчитать средневзвешенную цену по объему.Использование функции roll_apply на объекте DataFrame
Чтобы сделать это, у меня есть функция VWAP, что делает это для меня, как так:
def vwap(bars):
return ((bars.Close*bars.Volume).sum()/bars.Volume.sum()).round(2)
Когда я пытаюсь использовать эту функцию с rolling_apply, как показано на рисунке, я получаю сообщение об ошибке:
import pandas.io.data as web
bars = web.DataReader('AAPL','yahoo')
print pandas.rolling_apply(bars,30,vwap)
AttributeError: 'numpy.ndarray' object has no attribute 'Close'
Ошибка имеет смысл для меня, потому что roll_apply не требует DataSeries или ndarray как входной, а не dataFrame .. то, как я это делаю.
Есть ли способ использовать roll_apply для DataFrame для решения моей проблемы?
Хорошее решение, было полезно для меня! Вопрос: В вашем понимании списка вы бы не использовали bars.iloc [i: i + window + 1], поскольку .iloc исключает верхнюю границу? В вашем коде только 29 значений используются в вычислении, заканчивающемся на bars.iloc [i + window-1], в то время как bar.index [i + window] используется как метка. При таком расчете я бы подумал, что вы хотите, чтобы в расчет включались строки bar.iloc [i + window]. – geronimo