Как я могу рассчитать новый столбец на основе условий панды нескольких предыдущих значений - PullRequest
0 голосов
/ 07 октября 2018

У меня есть следующий фрейм данных.Как я могу создать новый столбец на основе следующего: если, например, строка 19:24 имеет разность <.1 И строка 19:21 имеет разность <.1, тогда создайте новый столбец и установите строкуравно 1 </p>

Я знаю, как я могу это сделать с помощью операторов if, но я застрял на попытке использовать решение pandas (более эффективное) для этого.

                    open     high      low    close      diff                   
TimeStamp                                                                           
2018-10-05 19:00:00  6637.90  6645.06  6637.17  6643.52 -0.057705                   
2018-10-05 19:03:00  6643.52  6650.00  6641.00  6649.99  0.002710                   
2018-10-05 19:06:00  6648.91  6650.00  6640.82  6642.85 -0.017769                   
2018-10-05 19:09:00  6642.85  6646.47  6642.00  6646.20  0.000000                   
2018-10-05 19:12:00  6646.20  6646.21  6642.00  6642.40  0.085065                   
2018-10-05 19:15:00  6641.00  6641.84  6636.35  6638.54 -0.024863                   
2018-10-05 19:18:00  6639.26  6643.38  6638.00  6640.00 -0.067340                   
2018-10-05 19:21:00  6642.49  6643.82  6642.47  6643.63  0.104931                   
2018-10-05 19:24:00  6643.78  6645.31  6635.50  6640.02 -0.031497                   

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете использовать pd.Series.shift и оператор & для объединения двух логических рядов.

Это установит flag = 1 для каждого экземпляра, где diff < 0.1 в строкегде эта строка и предыдущая строка удовлетворяют условию.

df['flag'] = (df['diff'].lt(0.1) & df['diff'].shift().lt(0.1)).astype(int)

Возможно, более эффективным было бы использование shift в одном сравнении:

s = df['diff'].lt(0.1)
df['flag'] = (s & s.shift()).astype(int)

Результат:

print(df)

                        open     high      low    close      diff  flag
TimeStamp                                                              
2018-10-05 19:00:00  6637.90  6645.06  6637.17  6643.52 -0.057705     0
2018-10-05 19:03:00  6643.52  6650.00  6641.00  6649.99  0.002710     1
2018-10-05 19:06:00  6648.91  6650.00  6640.82  6642.85 -0.017769     1
2018-10-05 19:09:00  6642.85  6646.47  6642.00  6646.20  0.000000     1
2018-10-05 19:12:00  6646.20  6646.21  6642.00  6642.40  0.085065     1
2018-10-05 19:15:00  6641.00  6641.84  6636.35  6638.54 -0.024863     1
2018-10-05 19:18:00  6639.26  6643.38  6638.00  6640.00 -0.067340     1
2018-10-05 19:21:00  6642.49  6643.82  6642.47  6643.63  0.104931     0
2018-10-05 19:24:00  6643.78  6645.31  6635.50  6640.02 -0.031497     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...