Как найти узоры в пандах? - PullRequest
0 голосов
/ 01 марта 2019

Используя pandas и python, я хочу найти схему, в которой приток потока намного больше обычного, и за ним следуют в течение 5 дней с оттоком, который составляет не менее 5% от притока впоток.См. Кадр данных ниже.

Я хочу иметь возможность пометить это движение в новом столбце (назовем его флагом).

Представьте, что у этого фрейма данных тысячи строк, и вы хотите найти похожий шаблон и пометить его повсюду.

Index    date           stream
0        2019-01-01        2
1        2019-01-02        0
2        2019-01-03        1
3        2019-01-04        0
4        2019-01-05        3
5        2019-01-06        2
7        2019-01-07        100
8        2019-01-08        0
9        2019-01-09        0
10       2019-01-10       -95
11       2019-01-11        3    
12       2019-01-13        0  
13       2019-01-14        2
14       2019-01-15       -1
15       2019-01-16        0
16       2019-01-17        2
17       2019-01-18        93
18       2019-01-19       -2
19       2019-01-20       -89

1 Ответ

0 голосов
/ 01 марта 2019

Попробуйте выполнить rolling averaging для df['stream'].

stream = [2, 0, 1, 0, 3, 2, 100, 0, 0, -95, 3, 0, 2, -1, 0, 2, 93, -2, -89]
date = [
    '2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05',
    '2019-01-06', '2019-01-07', '2019-01-08', '2019-01-09', '2019-01-10',
    '2019-01-11', '2019-01-13', '2019-01-14', '2019-01-15', '2019-01-16',
    '2019-01-17', '2019-01-18', '2019-01-19', '2019-01-20'
]

df = pd.DataFrame({'date': date, 'stream': stream})

def process(row):
    if row['stream'] > 20*row['stream_mean']:
        return 1
    else:
        return 0
df['stream_mean'] = df['stream'].rolling(5).mean()
df['stream_mean'] = df['stream_mean'].shift(periods=1)
df['flag'] = df.apply(process,axis=1)
df

Было бы лучше, если вы примените Bollinger Band и создадите Standard Deviation column, а также можете попробовать метод 95% Confidence interval.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...