增量移动平均线

问题描述 投票:0回答:1

我有以下示例数据框:

身份证 日期 数据 平均
1 2024年3月18日 45.72991477 9.845398369
1 2024年3月19日 16.66879054 12.22665416
1 2024年3月20日 0.956178897 12.29306183
1 2024年3月21日 0.008082319 12.27617302
1 2024年3月22日 18.4076123 14.88212601
1 2024年3月23日 8.3212202 12.87506446
1 2024年3月24日 2.950587398 13.29176949
1 2024年3月25日 79.01593876
2 2024年3月18日 5.234445299 1.555186844
2 2024年3月19日 13.36603398 3.441331288
2 2024年3月20日 2.76175807 3.835868155
2 2024年3月21日 0.007854825 3.710561654
2 2024年3月22日 32.75987619 8.361661724
2 2024年3月23日 0.363040191 7.823976139
2 2024年3月24日 3.461841086 8.279264234
2 2024年3月25日 6.28783374

avg 柱本质上是 7 天移动平均线。 我目前使用以下代码来填充 avg

index["avg"] = index.groupby("ID")["data"].transform(lambda x: x.rolling(7).mean())

我知道每次运行代码时,它都会重新计算整个 avg 列。 与此同时,我的数据每天都在增量添加。 有没有办法仅使用过去 7 天的数据(包括每个 ID 的最新添加数据)来计算最新日期平均值?请注意,滚动平均值针对每个 ID。 这种方法会比我每次运行时重新计算整个 avg 列的原始方法更有效吗?

pandas rolling-computation
1个回答
0
投票

我认为计算过去 7 天的滚动平均值肯定比重新计算整个数据帧更快。这是我尝试使用一些虚拟数据的代码

lst_seven_dys_df=full_df.tail(7).copy()
lst_seven_dys_df['roll']=lst_seven_dys_df['Score'].rolling(window=7).mean()
new_df=pd.concat([full_df.iloc[0:-1,:],lst_seven_dys_df.tail(1)]).reset_index(drop=True)
new_df
© www.soinside.com 2019 - 2024. All rights reserved.