基于布尔值扩展选择



我有一个信号作为数据帧,比如说:

import pandas as pd
import numpy as np
signal = pd.DataFrame(columns=["Signal"], data=np.random.random(100))

和一个简单的掩码:

mask = signal["Signal"] > 0.5

我现在想选择掩码为真的信号值,但也要选择该选择周围的N个值。因此,如果我的掩码是[False, False, True, False, True, False, False]并且N=1,那么选择应该基于像[False, True, True, True, True, True, False]这样的掩码。有没有一种方法可以快速做到这一点,而不必迭代各个行?

您可以使用shift:选择周围的元素

signal[(signal.Signal > 0.5) | (signal.Signal.shift() > 0.5) | (signal.Signal.shift(-1) > 0.5)]

对于随机数据,部分输出是:

6   0.526264
7   0.613049
8   0.106939
9   0.917906
10  0.875563
11  0.269236
14  0.231961
15  0.757697
16  0.227037

另一种选择是将rollingcenter=True一起使用。如果在给定的大小为N的窗口中(在这种情况下,N=3(,至少有一个项目大于阈值-在.中计数当前行

THRESHOLD = 0.5 
signal[signal.Signal.rolling(3, center = True).max() > THRESHOLD]

N=3表示您正在查看当前行+两侧各一行。N=5表示当前行+2等

最新更新