Есть ли способ зафиксировать, если значения ряда или последовательности становятся неизменными? - PullRequest
0 голосов
/ 02 августа 2020

Моя цель - отслеживать и проверять, не становится ли значение данных неизменным (ни возрастающим, ни уменьшающимся).

Пример.

data = numpy.Series([1223.4,110.4,100.8,100.3,100.1,100,100,99,96,95,95,95,95,34])

Здесь и далее '96' определенный застой в данных, который я хочу здесь зафиксировать. Обратите внимание, что после «100.1» значение не изменилось для следующих двух записей, но мне нужно окно из 3 записей, поэтому, если значение не изменится для трех последовательных записей. мы можем отметить его как застойный.

Я ожидаю вывода в следующем формате:

[0,0,0,0,0,0,0,0,0,1,1,1,1,0]

Есть ли способ сделать это?

1 Ответ

1 голос
/ 03 августа 2020

Этот код даст правильный результат

import numpy as np

data = np.array([1223.4,110.4,100.8,100.3,100.1,100,100,99,96,95,95,95,95,34])
output = np.zeros (len(data))

def stagnant (data, output):

    prv = data[0]
    counter = 1
    
    for i in range (1, len(data)):
        if data[i] == prv:
            counter = counter + 1
        else:
            counter = 1
           
        if counter == 3 :
            for j in range (i, i-3, -1):
                output[j]=1
                
        elif counter > 3:
            output[i]=1

        prv = data[i]
        

stagnant(data, output)
print (output)

ВЫХОД

[0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 0.]
...