Полный код:
import pandas as pd
import numpy as np
df = pd.read_excel('C:/Users/Administrator/Documents/Book1.xlsx')
df['boolean'] = df['Prev Close'] < df['Close']
#sample data
df = pd.DataFrame({'boolean' : [False] + [True] + [False] * 2 +
[True] * 3 + [False] + [True]})
print (df)
boolean
0 False
1 True
2 False
3 False
4 True
5 True
6 True
7 False
8 True
Как проверить, сколько истинных значений имеется подряд, если есть несколько истинных значений, добавьте 1 к счетчику тенденций и добавьте его в виде столбца. Для ложных значений счетчик должен быть установлен на 0
Следовательно, окончательный ожидаемый фрейм данных будет выглядеть так, как показано на рисунке:
boolean trend
0 False 0
1 True 1
2 False 0
3 False 0
4 True 1
5 True 2
6 True 3
7 False 0
8 True 1
Для использования тренда:
a = df['boolean']
b = a.cumsum()
df['trend'] = (b-b.mask(a).ffill().fillna(0).astype(int))
boolean trend
0 False 0
1 True 1
2 False 0
3 False 0
4 True 1
5 True 2
6 True 3
7 False 0
8 True 1
Подробности:
Первое использование Series.cumsum:
print (a.cumsum())
0 0
1 1
2 1
3 1
4 2
5 3
6 4
7 4
8 5
Name: boolean, dtype: int32
Затем замените True
s на NaN
s и заполните отсутствующие значения:
print (b.mask(a).ffill())
0 0.0
1 0.0
2 0.0
3 0.0
4 2.0
5 2.0
6 2.0
7 2.0
8 2.0
9 5.0
10 5.0
Name: boolean, dtype: float64
Затем вычтите значения b
:
print (b-b.mask(a).ffill())
0 0.0
1 0.0
2 1.0
3 2.0
4 0.0
5 0.0
6 1.0
7 2.0
8 3.0
9 0.0
10 1.0
Name: boolean, dtype: float64
Я понимаю, что True=1 и False=0. Следовательно, в этом контексте вы можете объяснить, что вы назначаете в df?
@Huzefa - я думаю, что назначить означает добавить новый столбец.
Нет, я имел в виду ({'boolean' : [False] + [True] + [False] * 2 + [True] * 3 + [False] + [True]})
@Huzefa - это образцы данных;)
умножая на 2 и 3 что получается?
@Huzefa - это для повторения;)
@Huzefa - [True] * 3
такой же, как [True,True,True]
Давайте продолжим обсуждение в чате.
@Huzefa - Могу ли я подтвердить ваш вопрос?
Давайте продолжим обсуждение в чате.
@TrentonMcKinney - Спасибо, и вам тоже ;)