我有一个包含多列的数据帧.对于每一列,我希望返回一个指示符(1或-1),当当前行值是滚动平均值的定义倍数时,更改该列的滚动平均值是否重置.更复杂的是,我不希望在上一次重置后滚动窗口达到最小长度之前进行重置.
以下是一个倍数为2、最小长度为4、起始指示符值为1的示例
正在启动数据帧:
df = pd.DataFrame(
{
"A": [0.1, 0.1, 0.15, 0.1, 0.1, 0.7, 0.1, 0.1, 0.5, 1, 0.1, 0.1],
"B": [0.1, 0.1, 0.4, 0.1, 0.8, 0.1, 0.1, 0.1, 0.1, 0.1, 0.9, 0.1],
},
index=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
)
print(df)
A B
0 0.10 0.1
1 0.10 0.1
2 0.15 0.4
3 0.10 0.1
4 0.10 0.8
5 0.70 0.1
6 0.10 0.1
7 0.10 0.1
8 0.50 0.1
9 1.00 0.1
10 0.10 0.9
11 0.10 0.1
我想获得:
A B
0 1 1
1 1 1
2 1 1
3 1 1
4 1 -1
5 -1 -1
6 -1 -1
7 -1 -1
8 -1 -1
9 1 -1
10 1 1
11 1 1
以A栏为例:
- 第一次重置发生在第5行,0.7&>=2*平均值(第0行到第5行),我们观察到了6行
- 第8行没有发生任何情况,因为新的滚动平均值只有3个观测值
- 下一次重置发生在第9行,1&>=2*平均值(第6行到第9行),我们已经观察到4行
我看过各种帖子,最接近的是下面的帖子,但似乎没有一个帖子真正完全解决了这个问题: