#python #pandas #dataframe #if-statement #while-loop
Вопрос:
У меня есть фрейм данных, который представляет собой точечную диаграмму. Цель состоит в том, чтобы ограничить изменение наклона между точками не более чем на 0,5 градуса.
def calc_slope(frame): frame['slope'] = (frame['y'].shift(1)) - frame['y']) / (frame['x'].shift(1) - frame['x']) frame['slope-change'] = frame['slope'] - frame['slope'].shift(-1) frame['check-slope'] = ['FAIL' if abs(x) gt; 0.5 else 'OK' for x in frame['slope-change']] data = [[1,10.1],[2,10],[3,9.5],[4,9.4],[5,9.3],[6,9.1],[7,8.5],[8,9.4],[9,10],[10,8]] df = pd.DataFrame(data,columns=['x','y']) calc_slope(df)
Теперь проблема, с которой я столкнулся, заключается в том, что мне нужно увеличить значения y в точках № 7 и 10 с шагом 0,1, пока они не пройдут проверку, я считаю, что для этого мне нужен цикл while. Вот моя текущая попытка, которая не работает.
while df.loc[df['check-slope'] == "FAIL"]: if row['check-slope'] == "FAIL" and row['slope-change'] lt; 0: row['y'] = 0.1 elif row['check-slope'] == "FAIL" and row['slope-change'] gt; 0: row[idx 1] = 0.1 calc_slope(df)
Любая помощь будет признательна. Спасибо!
Ответ №1:
Действительно неясно, что вы тестируете в своем цикле while, потому что вы говорите о пунктах 7 и 10, но никогда не ссылаетесь на эти конкретные строки, и у вас есть условие изменения уровня, которое также не обсуждается???
этот цикл выполняет некоторые проверки тех строк, которые содержат конкретно точки 7 и 10, и прерывается, когда оба условия в порядке
while True: if df.at[6, 'check-slope'] == 'FAIL' or df.at[9, 'check-slope'] == 'FAIL' : if df.at[6, 'check-slope'] == 'FAIL' and df.at[6, 'slope-change'] lt; 0: df.at[6, 'y'] = 0.1 elif df.at[9, 'check-slope'] == 'FAIL' and df.at[9, 'slope-change'] gt; 0: df.at[9, 'y'] = 0.1 calc_slope(df) else: break
Комментарии:
1. Спасибо за ваш ответ. После запуска первой части кода:
2. Спасибо за ваш ответ. После выполнения первой части кода единственными точками в примере, которые не работают, являются точки 7 и 9, однако, когда изменение наклона является положительным числом, необходимо увеличить следующую точку, если изменение наклона отрицательное, то значение y в этой строке должно быть увеличено. Поэтому моя цель состоит в том, чтобы некоторое время посмотреть, пока в столбце проверки есть «Сбой», соответствующие значения y изменяются до тех пор, пока все точки «Не пройдут». Спасибо за руководство, я посмотрю, смогу ли я изменить код, который вы предоставили, чтобы выполнить это.