<p>我们可以使用<code>Series.where</code>来屏蔽,允许用<code>fillna</code>向前填充。另一个<code>where</code>只在每行的过期日期之前设置值,我们将剩余的值设置回0。你知道吗</p>
<pre><code>df['Forecast'] = (df['Predictions'].where(df.Predictions.eq(1))
.ffill()
.where(df.index < df.ExpirationDate)
.fillna(0, downcast='infer'))
</code></pre>
<hr/>
<pre><code> Predictions ExpirationDate Forecast
Date
2017-09-18 0 2017-10-20 0
2017-09-19 0 2017-10-20 0
2017-09-20 0 2017-10-20 0
2017-09-21 0 2017-10-20 0
2017-09-22 0 2017-10-20 0
2017-09-25 0 2017-10-20 0
2017-09-26 0 2017-10-20 0
2017-09-27 0 2017-10-20 0
2017-09-28 0 2017-10-20 0
2017-09-29 0 2017-10-20 0
2017-10-02 0 2017-10-20 0
2017-10-03 0 2017-10-20 0
2017-10-04 0 2017-10-20 0
2017-10-05 1 2017-10-20 1
2017-10-06 0 2017-10-20 1
2017-10-09 0 2017-10-20 1
2017-10-10 0 2017-10-20 1
2017-10-11 0 2017-10-20 1
2017-10-12 0 2017-10-20 1
2017-10-13 0 2017-10-20 1
2017-10-16 0 2017-10-20 1
2017-10-17 0 2017-10-20 1
2017-10-18 0 2017-10-20 1
2017-10-19 0 2017-10-20 1
2017-10-20 0 2017-10-20 0
</code></pre>