这是我的DataFrame
Date Time Value
16.02.2020 21:00:00 0.05012
16.02.2020 22:00:00 0.04285
16.02.2020 23:00:00 0.03559
17.02.2020 0:00:00 0.02833
17.02.2020 1:00:00 0.02107
17.02.2020 2:00:00 0.01380
17.02.2020 3:00:00 0.00654
17.02.2020 4:00:00 -0.00073
17.02.2020 5:00:00 -0.00799
17.02.2020 6:00:00 -0.01526
17.02.2020 7:00:00 -0.02252
17.02.2020 8:00:00 -0.02978
17.02.2020 9:00:00 -0.03704
17.02.2020 10:00:00 -0.04430
17.02.2020 11:00:00 -0.05156
如何查找值过零的行?我可以通过迭代来做到:
如果当前值> 0,而先前值<0,
或
当前值<0和上一个值> 0,
所以它是零交叉。
但是我的数据帧很大。如何不进行迭代?
答案 0 :(得分:4)
IIUC,您可以尝试np.sign
+ series.diff
out = df[np.sign(df['Value']).diff().fillna(0).ne(0)].copy()
答案 1 :(得分:2)
我们可以创建遮罩以使用shift
mask1 = (df['Value'] < 0)
mask2 = (df['Value'] > 0).shift()
mask3 = (df['Value'] > 0)
mask4 = (df['Value'] < 0).shift()
df.loc[(mask1 & mask2) | (mask3 & mask4)]
#output:
Date Time Value
7 17.02.2020 4:00:00 -0.00073