问题描述
我正在使用 Python 3.8 上的 DataFrame 来尝试复制 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