Новый столбец при условии - PullRequest
0 голосов
/ 09 апреля 2019

Я делаю проект для своего класса, и у меня есть некоторые проблемы с логикой в ​​условиях нового столбца данных.

Это моя проблема:

df["filter"] = np.where(df["Signal"]>= 0, 1, -1)
df["lag"] = np.where(df["filter"] != df["filter"].shift(1), 1, 0 )
df["strat"] = df["filter"]*df["lag"]
df1 = df["strat"]
df1 = pd.DataFrame(df1)

У меня уже есть извлеченные сигналы, я помещаю их в df, после чего я хочу отфильтровать эти сигналы и установить новый столбец «фильтр», который принимает значение 1, когда мой сигнал положительный, и -1, когда он отрицательный.

После этого я устанавливаю новую задержку столбца с принимаемым значением 1, если значение фильтра изменяется, и 0, если оно такое же, как ранее (сдвиг).

И, наконец, я получаю столбец, умножая фильтр и задержку. Экран: df

Моя проблема в том, что я хочу более точно фильтровать свои сигналы, вы можете видеть, что в 13:55 мой сигнал очень близок к 0, поэтому я хочу, чтобы мой сигнал находился в диапазоне от -0,1 до 0,1, чтобы сохранить свою последнюю позицию и иметь 0 в моем столбце strat.

Я уже пробовал это:

col= 'Signal'
conditions=[ df[col] >= 0.1, (df[col] < 0.1) & (df[col]> -0.1), df[col] <= -0.1 ]
choices= [1,0,-1]
df["filter"] = np.select(conditions, choices, default=np.nan)
df["lag"] = np.where(df["filter"] != df["filter"].shift(1), 1, 0 )
df["strat"] = df["filter"]*df["lag"]
df1 = df["strat"]
df1 = pd.DataFrame(df1)

Я с этими линиями могу специально фильтровать мои сигналы, но у меня есть другая проблема: df

Как вы можете видеть, в столбце strat дважды 1, что не то, что я хочу, если позиция занята (1 или -1), то если мы продолжим эту позицию, это должно быть 0, а не 1.

Подводя итог, я хочу, чтобы уровень столбца был равен 1, если сигнал> 0,1, только если ранее мой уровень не был равен 1, и аналогично, -1, если сигнал <-0,1, только если ранее мой уровень не был ' т -1 И если мой сигнал находится в диапазоне от -0,1 до 0,1, то сохраняйте последнюю позицию .. </p>

Надеюсь, все ясно, спасибо за помощь

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