Мне нужен цикл for, который проходит через все строки столбца позиции и, в зависимости от того, каким был предыдущий элемент в этом столбце, заполняет текущее местоположение в соответствии с некоторыми правилами.Например, если предыдущее значение в позиции было нулевым, функция проверит, выше или ниже цена определенного значения, и будет действовать соответственно.
Проблема в том, что попытка уменьшить мой индекс на 1 внутри цикла не работает.
Я видел другие подобные вопросы, но ответы указывают на создание вне цикла другого столбца позиции, который смещен, а затем используйте этот.Причина, по которой эти решения не работают, заключается в том, что столбец позиции изменяется по мере продолжения цикла, и это изменение необходимо учитывать.
#position column
df['position']=0
df.position = np.where(df.price >= alo2,alo2_tsd,0)
df.position = np.where(df.price <= blo2, blo2_tsd,0)
for index in range(0,df.shape[0]):
if df.loc[index-1,'position'] == 0:
if df['price'][index] < alo2 and df['price'][index] >= alo1: #set first upside hedge
df.loc[index,'position'] = alo1_lots
elif df['price'][index] > blo2 and df['price'][index] <= blo1: #set first downside hedge
df.loc[index,'position'] = blo1_lots
else:
continue
Это дает мне ключевую ошибку: -1.Если я заменил «index-1» на «index + 1» (просто пытаясь понять, является ли -1 фактической проблемой), он выдаст мне KeyError: (0, 'position').если я удаляю -1 в целом, кажется, что код работает без проблем (хотя, конечно, не дает нужного мне результата).
Спасибо за вашу помощь.При ответе просто имейте в виду, что это не единственное утверждение if, которое я имею в цикле.У меня есть несколько других, и поэтому мне нужны эффективные решения.