擅长:python、mysql、java
<p>使用<code>rolling()</code>是正确的。但是,您必须记住,因为<code>rolling()</code>用新值替换了窗口末尾的值,所以您不能仅仅用<code>True</code>来标记窗口,当条件不适用时,您还会得到<code>False</code></p>
<p>下面是使用示例数据帧并执行所需转换的代码:</p>
<pre><code>df = pd.DataFrame([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]])
</code></pre>
<p>现在,定义一个以窗口为参数并返回条件是否满足的函数</p>
^{pr2}$
<p>我把门槛硬编码为10。因此,如果在任何窗口中大于10的值的数目大于或等于2,则最后一个值将被1(表示真),否则它将被-1(表示假)替换。在</p>
<p>如果您想将threshold参数保留为变量,那么请查看<a href="https://stackoverflow.com/a/12183507/5695235">this</a>答案以将它们作为参数传递。在</p>
<p>现在在滚动窗口上应用这个函数,使用窗口大小为3,轴1,另外,如果您不想要NaN,那么也可以在参数中将min_periods设置为1。在</p>
<pre><code>df.rolling(3, axis=1).apply(fun)
</code></pre>
<p>将输出生成为</p>
<pre><code> 0 1 2 3 4
0 NaN NaN -1.0 -1.0 -1.0
1 NaN NaN -1.0 -1.0 -1.0
2 NaN NaN 1.0 1.0 1.0
3 NaN NaN 1.0 1.0 1.0
4 NaN NaN 1.0 1.0 1.0
</code></pre>