Я работаю с DataFrame на Python 3.8, где пытаюсь воспроизвести вычисления Excel — базовый if
с двумя критериями, один из которых ссылается на саму строку раньше.
Backtest['trade_price']=0
Backtest.loc[(Backtest['z_en_crit']==1) &
(Backtest['trade_price'].shift(-1)==0), "trade_price"] = 1
Второй критерий, кажется, полностью игнорируется... так как trade_price
должен иметь только один 1
z_en_crit trade_price
Datetime
2020-10-21 11:00:00+01:00 0.0 0
2020-10-21 12:00:00+01:00 0.0 0
2020-10-21 13:00:00+01:00 1.0 1
2020-10-21 14:00:00+01:00 1.0 1
2020-10-21 15:00:00+01:00 1.0 1
2020-10-21 16:00:00+01:00 0.0 0
Если у вас есть идеи, как заставить это работать, а также сделать это быстрее, я был бы очень признателен! Спасибо!
Обновлено:
Требуемый результат:
z_en_crit trade_price
Datetime
2020-10-21 11:00:00+01:00 0.0 0
2020-10-21 12:00:00+01:00 0.0 0
2020-10-21 13:00:00+01:00 1.0 1
2020-10-21 14:00:00+01:00 1.0 0
2020-10-21 15:00:00+01:00 1.0 0
2020-10-21 16:00:00+01:00 0.0 0
Вы хотите вместо этого переключиться на «z_en_crit»? Кроме того, вам следует изменить направление сдвига, если вы хотите совпадать с первым из группы, а не с последним.
df['trade_price'] = np.where(
df['z_en_crit'].eq(1) & df['z_en_crit'].shift(1).eq(0), 1, 0)
df
z_en_crit trade_price
Datetime
2020-10-21 11:00:00+01:00 0.0 0
2020-10-21 12:00:00+01:00 0.0 0
2020-10-21 13:00:00+01:00 1.0 1
2020-10-21 14:00:00+01:00 1.0 0
2020-10-21 15:00:00+01:00 1.0 0
2020-10-21 16:00:00+01:00 0.0 0
Спасибо за быстрый ответ! Нет, я смотрю на предыдущее значение trade_price, т.е. в 13:00 я смотрю на 12:00 и если оно равно нулю, то это True. Как скользящие критерии
@John Пожалуйста, укажите ожидаемый результат в вопросе, и я буду рад отредактировать ответ.
@Джон, я все еще думаю, что тебе следует смотреть на z_en_crit, иначе условие не имеет смысла. Проверить правку сейчас?
Да, ты прав cs95, у меня был недостаток в моей логике, кажется. Кроме того, является ли ваш метод векторизацией numpy? т.е. самый быстрый способ сделать это?
@John, он использует numpy.where, который, насколько мне известно, сильно векторизован. Пожалуйста, запустите код и протестируйте его на своих данных.
Я не думаю, что ваш вопрос объяснен четко, потому что, если для trade_price установлено значение 0, то его смещение также приведет к 0. Не уверен, что пытается передать второе условие. Возможно, объясните, какие вычисления в Excel вы пытаетесь воспроизвести.