def streaks(df, col):
    sign = np.sign(df[col])
s = sign.groupby((sign != sign.shift()).cumsum()).cumsum()
return df.assign(u_streak=s.where(s > 0, 0.0), d_streak=s.where(s < 0, 0.0)
    .abs())
Pythonic способ вычисления полос в кадре данных pandas