У меня есть фрейм данных (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, а затем код завершается ошибкой.Увеличение должно быть установлено по-другому, но не уверен, как.Любые комментарии или предложения приветствуются.