У меня есть функция, сохраненная и определенная в другом скрипте под названием TechAnalisys.py Эта функция просто выводит скаляр, поэтому я планирую использовать pd.rolling_apply() для создания новый столбец в исходный dataframe (df
). Функция работает нормально, когда выполняется, но у меня проблемы при использовании приложения rolling_apply()
. Эта ссылка Passing arguments to rolling_apply показывает, как вы должны это делать, и именно так я считаю, что это мой код, но он по-прежнему отображается ошибка «TypeError: int object is is iterable»pandas rolling_apply TypeError: int object is iterable "
Эта функция (находится в скрипте TechAnalisys.py)
def hurst(df,days):
import pandas as pd
import numpy as np
df2 = pd.DataFrame()
df2 = df[-days:]
rango = lambda x: x.max() - x.min()
df2['ret'] = 1 - df.PX_LAST/df.PX_LAST.shift(1)
df2 = df2.dropna()
ave = pd.expanding_mean(df2.ret)
df2['desvdeprom'] = df2.ret - ave
df2['acum'] = df2['desvdeprom'].cumsum()
df2['rangorolled'] = pd.expanding_apply(df2.acum, rango)
df2['datastd'] = pd.expanding_std(df2.ret)
df2['rango_rangostd'] = np.log(df2.rangorolled/df2.datastd)
df2['tiempo1'] = np.log(range(1,len(df2.index)+1))
df2 = df2.dropna()
model1 = pd.ols(y=df2['rango_rangostd'], x=df2['tiempo1'], intercept=False)
return model1.beta
и теперь это основной сценарий:
import pandas as pd
import numpy as np
import TechAnalysis as ta
df = pd.DataFrame(np.log(np.cumsum(np.random.randn(100000)+1)+1000),columns =['PX_LAST'])
следующие работы:
print ta.hurst(df,50)
Это не работает:
df['hurst_roll'] = pd.rolling_apply(df, 15 , ta.hurst, args=(50))
Что плохого в коде ?
благодарит за ответ! – Gabriel