Я использую Python 3.4, с пандами, в pycharm
Я разместил свои данные в фрейме данных панд, который выглядит примерно так:
import pandas as pd
data = {'step': [1, 2, 2, 3, 4, 4, 4, 5, 5, 4, 5, 6, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8],
'trials': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]}
temp_df = pd.DataFrame(data=data)
проблема в том, что «шаг» в строке [15] и шаг в строке [16] соответственно равны 8 и 1, и такая разница недопустима для типа анализа, который я выполняю. Поэтому я хотел бы исключить / удалить / удалить ВСЕ строки между строкой 15 и строкой, в которой значение 'step' возвращается к строке [15], которая в данном случае равна 8, и ее можно найти в строке [23]. [ИЗМЕНЕНО после получения первого ответа] Имейте в виду, что правило заключается в том, что любое последующее значение может быть только +/- 1. Так, например, «шаг» в строке [9] равен 4, что меньше, чем «шаг» встрока [8], которая равна 5. Такая разница допустима, любая разница больше + - 1 - нет.
Это всего лишь пример, реальные данные имеют сотни тысяч строк, поэтому я ожидаю, что эта проблема будет встречаться более одного раза в моем фрейме данных.
Я искал способы перебирать строки с циклами for и тому подобное, но меня предупреждали, что эти методы очень медленные. И в любом случае я не смог придумать рабочий цикл for.
Мне также не удалось найти разумный программный способ сделать это без циклов и просто использовать панды и какое-то логическое индексирование. Я даже не уверен, возможно ли это без итерации. На данный момент я могу успешно найти все строки, в которых разница между строками [i] и row [i + 1] больше, чем модуль 1 , и логически индексировать это, но я застрял в этой точке.
В конечном итоге я бы создал фрейм данных, в котором исключены строки с 16 по 22.