Ускорение итерации по фрейму данных - PullRequest
0 голосов
/ 11 октября 2018

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

image

Я создал следующий цикл 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...