Pandas滑动平均 - 前后数据
我在想,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
你可以使用 rolling
和 shift
,正如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