Я хочу добавить новый столбец в фрейм данных, который принимает значение из столбца в следующей строке, если выполняются определенные условия.
df_psd['f2'] = np.where((df_psd['freq'] != 19.7403), df_psd.iloc[df_psd['index']+1,4], np.nan)
Я пытаюсь использовать np.where
вместо перебора строк, так как фреймы данных очень большие (> 2,5 млн строк). Последняя строка в фрейме данных всегда будет иметь значение «freq», равное 19,7403. В фрейме данных есть столбец с именем index, который равен номеру строки.
Когда я пытаюсь запустить указанную выше строку, я получаю ошибку индекса.
IndexError: позиционные индексаторы выходят за границы
Если я удалю +1 из метода .iloc
, он запустится, но вернет значение из той же строки, а не из следующей строки. Число 4 в методе '.ilo c' является правильным, поскольку без +1 он возвращает значение из правильного столбца только из неправильной строки.
Я попытался добавить еще одно условие в np.where term для проверки того, что он не приближается к концу фрейма данных, как показано ниже, но он по-прежнему вызывает ту же ошибку.
df_psd['f2'] = np.where((df_psd['freq'] != 19.7403) & (df_psd['index'] < (len(df_psd)-1)), df_psd.iloc[df_psd['index']+1,4], np.nan)
Если я изменяю возвращаемый термин, чтобы вернуть только индекс то я вижу, что он возвращает np.nan для правильных строк (т.е. условия работают правильно) и проверил, что это так для последней строки в фрейме данных.
Я пробовал искать по аналогичным вопросам о переполнении стека и прочитал документацию, но не могу понять, почему это дает мне ошибку индекса. Любой совет был бы большим подспорьем.