Я пытаюсь получить движущийся средний в DataFrame (df).
Код, который я написал, делает именно то, что я хочу, но это только для 5 строк. см. ниже:
def movingavarage (df,column, avg,remark):
for i in range(0, df.shape[0] - avg):
df.loc[df.index[i + avg],'SMA_5'] = np.round(((
df.iloc[i + 0, column] +
df.iloc[i + 1, column] +
df.iloc[i + 2, column] +
df.iloc[i + 3, column] +
df.iloc[i + avg - 1, column]) /
avg),1)
return output(df, remark)
Я хотел бы сделать то же самое для 200 строк, и я не думаю, что мне нужно копировать предыдущий код "df.iloc [i + ', i,', testcolumn] + 200 раз.
Так создана функция, которая помогает мне со средним битом кода. См. Ниже код и вывод:
ввод:
def loc (max):
for i in range (0, max, 1):
if i != max - 1:
x = print ('df.iloc[i +',i,', testcolumn] +')
elif i == max - 1:
x = print ('df.iloc[i +',i,', testcolumn] ')
return x
loc (4)
вывод:
df.iloc[i + 0 , testcolumn] +
df.iloc[i + 1 , testcolumn] +
df.iloc[i + 2 , testcolumn] +
df.iloc[i + 3 , testcolumn]
Это работает , но как мне объединить эти два?
Я пробовал несколько вариантов, но это постоянно дает мне ошибку:
File "/functions.py", line 45, in movingavarage2
loc (4) +
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
Объединенный код выглядит следующим образом:
def movingavarage2 (df,column, avg,remark):
for i in range(0, df.shape[0] - avg):
df.loc[df.index[i + avg],'SMA_5'] = np.round(((
loc (4) +
df.iloc[i + 4, column])/avg),1)
return output(df, remark)