#python #pandas
#python #панды
Вопрос:
Полный код:
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
Ответ №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
Комментарии:
1. @TrentonMcKinney — Спасибо тебе, и тебе тоже 😉
2. Я понимаю, что True = 1 и False = 0. Следовательно, в этом контексте вы можете объяснить, что вы назначаете в df?
3. @Huzefa — я думаю, что назначить означает добавить новый столбец.
4. Нет, я имел в виду ({‘boolean’: [False] [True] [False] * 2 [True] * 3 [False] [True]})
5. @Huzefa — Это образец данных 😉