擅长:python、mysql、java
<p>修改@mathick的答案以包含<code>na_fill</code>。还要注意,函数<code>f</code>需要返回一个值,这不能返回包含多个列的数据帧。</p>
<pre><code>def rolling_apply_df(dfg, N, f, nn=1, na_fill=True):
ii = [int(x) for x in np.arange(0, dfg.shape[0] - N + 1, nn)]
out = [f(dfg.iloc[i:(i + N)]) for i in ii]
if(na_fill):
out = pd.Series(np.concatenate([np.repeat(np.nan, N-1),np.array(out)]))
out.index = dfg.index[::nn]
else:
out = pd.Series(out)
out.index = dfg.index[N-1::nn]
return(out)
</code></pre>