Панды во время перебора строк до тех пор, пока не будут выполнены критерии

#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 изменяются до тех пор, пока все точки «Не пройдут». Спасибо за руководство, я посмотрю, смогу ли я изменить код, который вы предоставили, чтобы выполнить это.