пропустить строки при цикле по пандам - PullRequest
0 голосов
/ 20 марта 2019

Я борюсь со следующим и, похоже, не могу найти какое-либо решение онлайн.

У меня есть цикл for над фреймом данных. Предполагается, что этот цикл выполняет следующие действия: если содержимое столбца 'reversal' == 1, заполняет столбец 'action' 1, пропускает 125 строк, заполняет следующую 126-ую строку 'action' -1 и продолжает повторять цикл из следующего ряда. Если столбец 'reversal'! = 1, продолжайте цикл без заполнения 'action'.

У меня проблема 1: когда я пишу 'index = index + 126', по какой-то причине python не понимает, что ему нужно пропустить 126 строк. '

Проблема 2 в том, что, когда я добавляю условие, чтобы столбец действия не был длиннее столбца сторнирования, это условие не работает (см. Комментарии к коду).

#creating the on/off signal column
df_zinc['action'] = 0

#creating the loop
for index,row in df_zinc.iterrows():
    if row.reversal == 1:
        df_zinc.loc[index,'action'] = 1
        if index<len(df_zinc.index)-126:             #the purpose of this condition is to not have the action column longer than the reversal column. Thuogh, it appears not to be working
            df_zinc.loc[index+126, 'action'] = -1
        index= index + 127

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

не используйте itterrows (), если вы можете использовать индексирование.

попробуйте это:

#creating the on/off signal column
# df_zinc['action'] = 0
#
count = 0
# #creating the loop
for index in df_zinc.index:
    if index < count:
        continue
    if df_zinc.at[index , 'reversal'] == 1:
        df_zinc.at[index , 'action'] = 1
        if index < len(df_zinc)-126:             #the purpose of this condition is to not have the action column longer than the reversal column. Thuogh, it appears not to be working
            df_zinc.at[index+126, 'action'] = -1
        count = index + 127
0 голосов
/ 20 марта 2019
import numpy as np
import pandas as pd
reversal=np.eye(126,dtype=int)
reversal=reversal.reshape(-1)
data=pd.DataFrame({"reverse":reversal})
data['action']=0
for index in range(len(data)):
    if data.loc[index,"reverse"] == 1:
        data.loc[index,'action'] = 1
        if index<len(data.index)-126:            
            data.loc[index+126, 'action'] = -1
        index= index + 127

Вы можете попробовать это

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