选择列值在当前行中为1但在前一行中为0的行

2024-09-29 21:45:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python3.8上的一个数据框架,在那里我尝试复制Excel计算—一个基本的if,有两个条件,其中一个是引用前面的一行

Backtest['trade_price']=0
Backtest.loc[(Backtest['z_en_crit']==1) & 
             (Backtest['trade_price'].shift(-1)==0), "trade_price"] = 1

第二个标准似乎被完全忽略了。。。astrade_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

Tags: 数据框架标准datetimeifshift条件excel
1条回答
网友
1楼 · 发布于 2024-09-29 21:45:09

你想换成“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

相关问题 更多 >

    热门问题