在机器学习模型中使用Pandas的 shift和 rolling

编程语言 2026-07-09

我正在构建一个机器学习程序来预测足球比赛的结果。

一个我想用于训练程序的特征是球队在最近5场比赛中的平均进球数。我有一个pandas DataFrame,其中除了其他信息外,还包含这项数据。当我只使用 rolling(n).mean(),也就是我要预测的比赛的进球数(用于训练模型)时,这些进球数也会被用来计算最近5场比赛的平均值。

我已经尝试在 rolling() 之前使用 shift(1),但数据因此向下移动(如预期),并被 NaN 替换。这导致值的数量变得太小,因此 rolling(n) 会自动跳到下一行,我又遇到了同样的问题。

df = pd.read_csv("D1.csv")
n=5
df["FTHG"].shift(1).rolling(n).mean()

解决方案

df["FTHG"].shift(1).rolling(5).mean()

这会产生一个NaN,因为第一场比赛没有前一场比赛,因此你应该先按球队分组,然后再从那时起进行滚动移位。

df = df.sort_values(["HomeTeam", "Date"])

df["goals"] = (
    df.groupby("HomeTeam")["FTHG"]
      .shift(1)
      .rolling(5, min_periods=1)
      .mean()
      .reset_index(level=0, drop=True)
)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章