Я хочу сделать этот цикл значительно быстрее. Он рассчитывает ход подряд для каждого участника. Функция здесь применяется только к одному столбцу. Позже я перебираю каждую функцию (df.columns) и применяю эту функцию.
def move_iar(df, feature):
lst=[]
prev_move_iar = 0
for move in df[feature]:
if np.isnan(move):
move_iar = 0
lst.append(move_iar)
prev_move_iar = move_iar
else:
if move == 0:
move_iar = prev_move_iar
lst.append(move_iar)
prev_move_iar = move_iar
elif (move >= 0 and prev_move_iar >= 0) or (move <= 0 and prev_move_iar <= 0):
move_iar = move + prev_move_iar
lst.append(move_iar)
prev_move_iar = move_iar
elif (move < 0 and prev_move_iar >= 0) or (move > 0 and prev_move_iar <= 0):
move_iar = move
lst.append(move_iar)
prev_move_iar = move_iar
return pd.DataFrame(lst, index=df.index, columns=[feature]).rename(columns={feature : feature + 'IAR'})