我有一个信号作为数据帧,比如说:
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
另一种选择是将rolling
与center=True
一起使用。如果在给定的大小为N的窗口中(在这种情况下,N=3(,至少有一个项目大于阈值-在.中计数当前行
THRESHOLD = 0.5
signal[signal.Signal.rolling(3, center = True).max() > THRESHOLD]
N=3表示您正在查看当前行+两侧各一行。N=5表示当前行+2等