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
我正在考虑制作一个交易算法,如果列中的最后 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