цикл for для предыдущего значения индекса python - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужен цикл 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, которое я имею в цикле.У меня есть несколько других, и поэтому мне нужны эффективные решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...