<p>使用简单的<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.cumsum.html" rel="nofollow noreferrer">^{<cd1>}</a></p>
<pre><code>import calendar
df2 = pd.DataFrame(np.zeros(shape=[len(df),13]),
columns=map(lambda s: calendar.month_abbr[s],
np.arange(13)))
</code></pre>
<p>第一组以值开始,以<code>-values</code>结束</p>
<pre><code>r = np.arange(len(df))
df2.values[r, df.start.dt.month] = df['values']
df2.values[r, df.end.dt.month] = -df['values']
</code></pre>
<p>然后<code>cumsum</code>到<code>axis=1</code>
df2=df2.cumsum(1)</p>
<p>将final设置为<code>values</code></p>
<pre><code>df2.values[r, df.end.dt.month]= df['values']
</code></pre>
<p>最终输出:</p>
<pre><code> Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
0 0 0 0 0 0 1 1 0 0 0 0 0 0
1 0 0 0 0 0 2 2 2 2 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0
3 0 0 0 0 0 3 3 3 3 3 3 0 0
4 0 0 0 0 0 4 4 4 4 4 4 4 0
5 0 0 0 0 0 2 2 2 2 2 2 2 2
</code></pre>