<p>首先使用您的条件(bool从False变为True)和<code>cumsum</code>创建组,然后在<code>groupby</code>之后应用<code>rolling</code>:</p>
<pre><code>group = (df['bool']&(~df['bool']).shift()).cumsum()
df.groupby(group)['close'].rolling(2, min_periods=1).max()
</code></pre>
<p>输出:</p>
<pre><code>0 0 1.0
1 3.0
2 3.0
3 5.0
4 5.0
1 5 3.0
6 4.0
7 5.0
8 7.0
2 9 5.0
10 7.0
11 8.0
3 12 6.0
13 8.0
14 8.0
4 15 5.0
16 7.0
17 15.0
18 16.0
Name: close, dtype: float64
</code></pre>
<p>要作为列插入,请执行以下操作:</p>
<pre><code>df['condrolmax'] = df.groupby(group)['close'].rolling(2, min_periods=1).max().droplevel(0)
</code></pre>
<p>输出:</p>
<pre><code> close bool condrolmax
0 1 True 1.0
1 3 True 3.0
2 2 True 3.0
3 5 True 5.0
4 3 False 5.0
5 3 True 3.0
6 4 True 4.0
7 5 False 5.0
8 7 False 7.0
9 5 True 5.0
10 7 False 7.0
11 8 False 8.0
12 6 True 6.0
13 8 True 8.0
14 5 False 8.0
15 5 True 5.0
16 7 True 7.0
17 15 True 15.0
18 16 True 16.0
</code></pre>
<p><em>NB。如果希望滚动中包括边界,请在<code>rolling</code></em>中使用<code>min_periods=1</code></p>