У меня есть фрейм данных, который в основном состоит из трех столбцов: группа, отметка времени, значение.

Я создал следующий цикл for, который будет перебирать фрейм данных и запускать тесты, чтобы увидеть, являются ли значения приемлемыми или нет.Например, если между временными метками прошло недостаточно времени, чтобы учесть значение, то оно помечается как потенциально неверные данные.
Единственное предостережение в том, что значения не всегда следует сравнивать с предыдущим значением,а точнее последнее «хорошее» значение в группе.Таким образом, причина, по которой я пошел с циклом.
Мне интересно, есть ли лучший способ сделать это без цикла, или есть недостатки в цикле, которые помогли бы ускорить его?
dfy = pd.DataFrame(index=dfx.index,columns = ['gvalue','quality'])
for row in df.itertuples():
thisgroup = row[1]
thistimestamp = row[2]
thisvalue = row[3]
qualitytag = ''
qualitytest = True
if prevgroup == thisgroup:
ts_gap = thistimestamp - goodtimestamp
hour_gap = (thisvalue - goodvalue) * 3600
if hour_gap < 0:
qualitytag = 'H'
qualitytest = False
elif hour_gap > ts_gap:
qualitytag = 'A'
qualitytest = False
elif hour_gap >= 86400
qualitytag = 'U'
qualitytest = False
#if tests pass, update good values
if qualitytest:
goodvalue = thisvalue
goodtimestamp = thistimestamp
#save good values to y dataframe
dfy.iat[row[0],0] = goodvalue
dfy.iat[row[0],1] = qualitytag
prevgroup = thisgroup
df = dfx.join(dfy)