<p>根据你的要求,你不在乎一支球队是主场还是客场,只在乎每场比赛进多少球。试试这个:</p>
<pre><code># Rename the columns to make the unstacking operation a bit easier
# Always a good idea to specify an explicit `copy` when you intend
# to change the dataframe structure
>>> tmp = df[['Home', 'Away', 'HomeGoal', 'AwayGoal']].copy()
# Arrange the columns into a MultiIndex to make stacking easier
>>> tmp.columns = pd.MultiIndex.from_product([['Team', 'Goal'], ['Home', 'Away']])
# This is what `tmp` look like:
Team Goal
Home Away Home Away
0 Arsenal MU 5 1
1 MCity Liv 2 2
2 MU Liv 3 4
3 MCity MU 0 0
# And now the magic
>>> tmp.stack() \
.groupby('Team').rolling(2).mean() \
.groupby('Team').tail(1) \
.droplevel([1,2])
# Result
Goal
Team
Arsenal NaN
Liv 3.0
MCity 1.0
MU 1.5
</code></pre>
<p>下面是它的工作原理:</p>
<ul>
<li><code>stack</code>取消pivots<code>Home</code>和<code>Away</code>,因此对于每个匹配,我们有两行用于<code>Teams</code>和<code>Goal</code></li>
<li><code>groupby('Team').rolling(2).mean()</code>获取每个队在过去2场比赛中得分的滚动平均值</li>
<li><code>groupby('Team').tail(1)</code>获取每个团队的最后一个滚动平均值</li>
<li>此时,过渡数据框的索引中有3个级别:球队名称、比赛编号和上一场比赛的主客场指标。我们只关心第一个,所以我们将放弃另外两个</李>
</ul>