熊猫:如何找到过零的值?

时间:2020-09-01 15:32:24

标签: python pandas

这是我的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,

所以它是零交叉。
但是我的数据帧很大。如何不进行迭代?

2 个答案:

答案 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