我有以下示例数据框:
身份证 | 日期 | 数据 | 平均 |
---|---|---|---|
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 列的原始方法更有效吗?
我认为计算过去 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