Pandas滑动平均 - 前后数据

-3 投票
1 回答
59 浏览
提问于 2025-04-14 15:59

我在想,Pandas这个工具有没有简单的方法来计算前后平均值呢?

如果我想计算过去30天的平均值和未来3天的平均值,有没有简单的办法可以做到呢?

比如说:

编号 日期 计数A 平均值
1 2022-04-01 1050 14330.56
2 2022-04-02 1283 18568.15
3 2022-04-03 1071 19176.38
4 2022-04-04 982 20578.78
5 2022-04-05 996 21000.55

比如说,4月1日的滚动平均值是(14330.56+18568.15+19176.38+20578.78)/4。这里只算了当前日期,因为之前的数据没有了。在正常情况下,它会向回算30天和向前算3天,然后计算平均值。

谢谢!

1 个回答

1

你可以使用 rollingshift,正如Onyambu在评论中提到的那样:

def custom_rolling_mean(
    df: pd.DataFrame, col: str, window_back: int, window_forward: int, freq: str
) -> pd.DataFrame:
    df["Date"] = pd.to_datetime(df["Date"])
    df = df.set_index("Date")

    df["Avg"] = np.nan

    for i in range(window_forward, -1, -1):
        df["Avg"] = df["Avg"].fillna(
            df[col].rolling(window=f"{window_back}{freq}").mean().shift(-i)
        )
        window_back -= 1

    return df.reset_index()


df = custom_rolling_mean(df, col="Avg_vew", window_back=30, window_forward=3, freq="D")
        Date  Id  CountA       Avg_vew           Avg
0 2022-04-01   1    1050  14330.562857  18163.467711
1 2022-04-02   2    1283  18568.152767  18730.884169
2 2022-04-03   3    1071  19176.377218  18730.884169
3 2022-04-04   4     982  20578.778004  18730.884169
4 2022-04-05   5     996  21000.550000  18730.884169

撰写回答