Python 中的 N 个连续值屏幕

N consecutive values screen in Python

我正在考虑制作一个交易算法,如果列中的最后 n 个条目为“真”,它会给出“1”信号。这里的代码将如何查找回溯 window- 在 Whosebug 上找不到类似的东西。

提前致谢!

这样的事情怎么样?

df = pd.DataFrame({
    "col1": [1,2,3,4,5],
    "col2": [False, False, True, True, True]
})
df2 = pd.DataFrame({
    "col1": [1,2,3,4,5],
    "col2": [False, False, False, False, False]
})

def check_last_n(df, n):
    return (df["col2"].tail(n) == True).all()

print(check_last_n(df, 3))
print(check_last_n(df, 4))
print(check_last_n(df2, 2))
>>> True
>>> True
>>> False

您可以使用 .rolling() together with .sum() (sum on number of True values within rolling window), .ge() (greater than or equal to n) and finally .astype(int)(将 .ge() True/False 值的结果转换为 0/1 值),如下所示:

df['signal'] = df['Event'].rolling(n).sum().ge(n).astype(int)

在(相同)尺寸 n 的滚动 window 中满足计数 True >= n 自动确保最后 n连续值都是True.


df = pd.DataFrame({
    "Number": np.arange(1,9),
    "Event": [False, True, True, True, False, True, True, False]
})

n=2
df['signal'] = df['Event'].rolling(n).sum().ge(n).astype(int)

print(df)

   Number  Event  signal
0       1  False       0
1       2   True       0
2       3   True       1
3       4   True       1
4       5  False       0
5       6   True       0
6       7   True       1
7       8  False       0


n=3
df['signal'] = df['Event'].rolling(n).sum().ge(n).astype(int)


print(df)

   Number  Event  signal
0       1  False       0
1       2   True       0
2       3   True       0
3       4   True       1
4       5  False       0
5       6   True       0
6       7   True       0
7       8  False       0