<p><strong>熔化+枢轴</strong>:</p>
<pre><code>t1a['training_date'] = pd.to_datetime(t1a['training_date'])
</code></pre>
<hr/>
<p>如果您在6个月前确实需要:</p>
<pre><code>u = t1a.melt(['salesman','training_date'])
diff_ = (pd.to_datetime(u['variable'],format='%m/%y').dt.month
.sub(u['training_date'].dt.month))
u = u.assign(k=diff_).loc[lambda x: x['k'].between(-6,0)]
choices = (diff_.abs().astype(str).replace("0","").add("")+
np.select([diff_<0,diff_==0],['months_prior','training_month']))
out = (u.assign(Key=choices).pivot_table(index=["salesman","training_date"]
,columns="Key",values="value").set_index("training_month",append=True))
</code></pre>
<hr/>
<pre><code>print(out)
Key 1months_prior 2months_prior \
salesman training_date training_month
John 2020-11-30 300 100 150
Ruddy 2020-07-12 95 100 300
Key 3months_prior 4months_prior \
salesman training_date training_month
John 2020-11-30 300 30 80
Ruddy 2020-07-12 95 225 30
Key 5months_prior 6months_prior
salesman training_date training_month
John 2020-11-30 300 28 0
Ruddy 2020-07-12 95 50 90
</code></pre>
<hr/>
<p>如果您想要所有月份,包括之前和之后:</p>
<pre><code>u = t1a.melt(['salesman','training_date'])
diff_ = (pd.to_datetime(u['variable'],format='%m/%y').dt.month
.sub(u['training_date'].dt.month))
choices = (diff_.abs().astype(str).replace("0","").add("")+
np.select([diff_>0,diff_<0,diff_==0],
['months_later','months_prior','training_month']))
out = (u.assign(Key=choices).pivot_table(index=["salesman","training_date"]
,columns="Key",values="value").set_index("training_month",append=True))
</code></pre>
<hr/>
<pre><code>print(out)
Key 10months_prior 1months_later \
salesman training_date training_month
John 2020-11-30 300.0 100.0 250.0
Ruddy 2020-07-12 95.0 NaN 10.0
Key 1months_prior 2months_later \
salesman training_date training_month
John 2020-11-30 300.0 100.0 NaN
Ruddy 2020-07-12 95.0 100.0 20.0
Key 2months_prior 3months_later \
salesman training_date training_month
John 2020-11-30 300.0 150.0 NaN
Ruddy 2020-07-12 95.0 300.0 0.0
Key 3months_prior 4months_later \
salesman training_date training_month
John 2020-11-30 300.0 30.0 NaN
Ruddy 2020-07-12 95.0 225.0 20.0
Key 4months_prior 5months_later \
salesman training_date training_month
John 2020-11-30 300.0 80.0 NaN
Ruddy 2020-07-12 95.0 30.0 100.0
Key 5months_prior 6months_prior \
salesman training_date training_month
John 2020-11-30 300.0 28.0 0.0
Ruddy 2020-07-12 95.0 50.0 90.0
Key 7months_prior 8months_prior \
salesman training_date training_month
John 2020-11-30 300.0 250.0 200.0
Ruddy 2020-07-12 95.0 NaN NaN
Key 9months_prior
salesman training_date training_month
John 2020-11-30 300.0 20.0
Ruddy 2020-07-12 95.0 NaN
</code></pre>