Найти следующее изменение в столбце - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть следующий фрейм данных

In[14]: data.head()
Out[14]: 
    2020-04-29 08:14:20.226546389+00:00    192800.0
    2020-04-29 08:14:20.316794250+00:00    192800.0
    2020-04-29 08:14:20.458210433+00:00    192810.0
    2020-04-29 08:14:20.506966171+00:00    192800.0
    2020-04-29 08:14:20.525237382+00:00    192800.0

Я хотел бы добавить столбец next_move, равный 1 или -1, если следующее изменение цены вверх или вниз. Таким образом, в первом и втором ряду я хотел бы получить 1, затем -1 et c ...

Я хотел бы опустить прямую для l oop с проверкой следующей строки, которая имеет цена отличается от рассматриваемой строки. У вас есть идеи, как это сделать эффективно?

1 Ответ

2 голосов
/ 29 апреля 2020

Вы можете использовать diff, чтобы получить первое отличие серии, shift, чтобы учесть тот факт, что мы хотим, чтобы строка следующая и np.where для обновления с 1 или -1 соответственно:

import numpy as np
df['next_move'] = np.where(df.col_2.diff().shift(-1 ,fill_value=0).ge(0), 1, -1)

Или мы также можем map логический ряд со словарем:

df['next_move'] = df.col_2.diff().shift(-1 ,fill_value=0).ge(0).map({False:-1,True:1})

print(df)
                               col_1     col_2  next_move
2020-04-29  08:14:20.226546389+00:00  192800.0          1
2020-04-29  08:14:20.316794250+00:00  192800.0          1
2020-04-29  08:14:20.458210433+00:00  192810.0         -1
2020-04-29  08:14:20.506966171+00:00  192800.0          1
2020-04-29  08:14:20.525237382+00:00  192800.0          1
...