<p>使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot.html" rel="nofollow noreferrer">^{<cd1>}</a>重塑数据帧并通过<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html" rel="nofollow noreferrer">^{<cd2>}</a>添加完整月份:</p>
<pre><code>df1 = df.pivot('Color','Month','Oty').reindex(columns=range(1,13))
print (df1)
Month 1 2 3 4 5 6 7 8 9 10 11 \
Color
1 34047.0 36654.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN 37291.0 35270.0 NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN 35407.0 NaN NaN NaN NaN NaN NaN
Month 12
Color
1 9300.0
2 NaN
3 NaN
</code></pre>
<p>然后将<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.roll.html" rel="nofollow noreferrer">^{<cd3>}</a>与<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.join.html" rel="nofollow noreferrer">^{<cd4>}</a>一起使用:</p>
<pre><code>s = pd.DataFrame(np.roll(df1.to_numpy(), 1, axis=1),
index=df1.index,
columns=df1.columns).stack().rename('Previous Month')
df = df.join(s, on=['Color','Month']).fillna({'Previous Month':0})
print (df)
Index Color Month Oty Previous Month
0 0 1 1 34047 9300.0
1 1 1 2 36654 34047.0
2 2 2 3 37291 0.0
3 3 2 4 35270 37291.0
4 4 3 5 35407 0.0
5 5 1 12 9300 0.0
</code></pre>