Как правильно установить приращение в цикле while? - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть фрейм данных (DF), мне нужно перебрать каждую строку и проверить, выполняются ли в этой строке некоторые условия, если они затем помечают эту строку (скажем, я добавляю еще один столбец с меткой «flag» и выравниваю его до 1)- в том же цикле проверьте, есть ли другие строки с похожими условиями, если они есть, пометьте их также.В следующем цикле посмотрите на тот же DF, но исключите помеченные строки.Размер DF будет изменяться от NxM до (Nn) x M, где n - количество помеченных строк.Цикл будет продолжаться до тех пор, пока len (DF) не станет <= 1 (то есть, пока все строки не будут помечены как 1).Цикл for не работает, потому что при продолжении цикла размер DF уменьшается, поэтому я могу использовать цикл while только с инкрементом.Однако, как я могу установить приращение (оно должно быть динамическим)? </p>

Я действительно не уверен, как решить эту проблему.

Вот неудачная попытка.

a=len(DF.loc[DF['flag'] != 1]) #should be  (NxM) initially
i = 0
# at every loop we redefine size of DF in variable a
while a >= 1:
        print(i)
        # select first row          
        row = DF.loc[DF['flag'] != 1].iloc[[i]]
        # flag row if conditions are met
        DF['flag'].values[i] = np.where(if conditions met, 1, '')

        #there is another piece of code that looks for rows with similar 
        #conditions but won't add it here

        # the following variable a redefines length of DF 
        a=len(allHoldingsLookUp.loc[allHoldingsLookUp['flag'] != 1])
        i+=1

У меня здесь проблема.Приращение у меня не работает.Скажем, «i» достигает 100, а длина DF уменьшается до 70, а затем код завершается ошибкой.Увеличение должно быть установлено по-другому, но не уверен, как.Любые комментарии или предложения приветствуются.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Можете ли вы попробовать это.Надеюсь, что это работает.

def recur(DF):
  row = DF.loc[DF['flag'] != 1].iloc[[1]]            
  DF['flag'].values[1] = np.where(if conditions met, 1, '')
  #there is another piece of code that looks for rows with similar 
  #conditions but won't add it here 
  # the following variable a redefines length of DF 
  a=len(DF.loc[DF['flag'] != 1])
  if a >= 1:
    recur(DF.loc[DF['flag'] != 1])
  return none
0 голосов
/ 25 сентября 2018

Пожалуйста, попробуйте, если это изменение работает ..

a=len(DF.loc[DF['flag'] != 1]) #should be  (NxM) initially
# at every loop we redefine size of DF in variable a
while a >= 1:
        i = 1
        # select first row          
        row = DF.loc[DF['flag'] != 1].iloc[[i]]
        # flag row if conditions are met
        DF['flag'].values[i] = np.where(if conditions met, 1, '')

        #there is another piece of code that looks for rows with similar 
        #conditions but won't add it here

        # the following variable a redefines length of DF
        try:
            a=len(DF.loc[DF['flag'] != 1])
        except:
            break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...