<p>以下是一种在查找上个月后使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.MultiIndex.from_arrays.html" rel="nofollow noreferrer">^{<cd1>}</a>和<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Index.map.html" rel="nofollow noreferrer">^{<cd2>}</a>的方法:</p>
<pre><code>prev_month = pd.to_datetime(df['Month'],format='%m').sub(pd.Timedelta(1,unit='m')).dt.month
m = df.set_index(['Color','Month'])['Quantity']
final = (df.assign(Prev_Month_Value=pd.MultiIndex.from_arrays([df['Color'],prev_month])
.map(m).fillna(0)))
#To assign into the existing df,use below code instead of df.assign() which returns a copy
#df['Previous Month Value'] = (pd.MultiIndex.from_arrays([df['Color'],prev_month])
# .map(m).fillna(0)
</code></pre>
<hr/>
<p>输出:</p>
<pre><code> Color Month Quantity Prev_Month_Value
index
0 1 1 34047 9300.0
1 1 2 36654 34047.0
2 2 3 37291 0.0
3 2 4 35270 37291.0
4 3 5 35407 0.0
5 1 12 9300 0.0
</code></pre>
<p>详情:</p>
<blockquote>
<p><strong>Step1</strong> : Find previous month by converting <code>Month</code> column to datetime and subtract 1 month using <a href="https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.Timedelta.html" rel="nofollow noreferrer"><code>pd.Timedelta</code></a>.</p>
<p><strong>Step2</strong>: Create a multiindex series with Quantity as value and <code>Color</code> and <code>Month</code> as index.</p>
<p><strong>Step3</strong>: Create a MultiIndex using <code>Color</code> and <code>prev_month</code> series and map it back as new column (also fill nan with 0)</p>
</blockquote>