<p><code>rolling</code>对象是可编辑的,它允许这样的解决方案:</p>
<pre class="lang-py prettyprint-override"><code># drop NAs and group by date into lists of values
df_per_date = df.dropna().groupby('date').apply(lambda g: g.value.to_list())
# compute medians across windows ('sum' concatenates multiple lists into one list)
medians = [np.median(window.agg(sum)) for window in df_per_date.rolling(5)]
# result
medians = pd.Series(index=df_per_date.index, data=medians)
medians
</code></pre>
<p><a href="https://i.stack.imgur.com/CMEWl.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/CMEWl.png" alt="enter image description here"/></a></p>
<hr/>
<p>顺便说一下,我加载的数据如下:</p>
<pre class="lang-py prettyprint-override"><code># load the data
df = pd.read_csv(pd.io.common.StringIO("""
2019-01-07 NaN
2019-01-08 NaN
2019-01-08 0.02
2019-01-09 31.45
2019-01-10 NaN
2019-01-10 71.87
2019-01-10 90.18
2019-01-11 NaN
2019-01-12 12.67
2019-01-12 5.68
2019-01-12 11.23
2019-01-12 21.67
2019-01-12 14.77
2019-01-12 5.18
2019-01-13 14.38
2019-01-13 NaN
2019-01-13 71.13
2019-01-13 20.02
2019-01-13 103.10
2019-01-14 NaN
2019-01-15 32.48
2019-01-16 37.37
2019-01-16 31.05
2019-01-16 7.00
2019-01-17 NaN
2019-01-17 39.65
2019-01-18 23.68
2019-01-18 0.08
2019-01-18 41.35
2019-01-19 NaN
2019-01-19 45.85
2019-01-19 3.98
2019-01-19 4.60
2019-01-19 NaN
2019-01-19 NaN
2019-01-20 3.60
2019-01-20 5.03
2019-01-20 15.70
""".strip()), sep='\s+', names=['date', 'value'], parse_dates=['date'])
</code></pre>