我有一个基本上由三列组成的数据框:组,时间戳,值。
我创建了以下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)