首页 > 解决方案 > 如何做一个“循环年”的移动平均线

问题描述

我正在对某个数字进行移动平均,在一个排序期间

new_df = pd.DataFrame()
for lid in working_df.location_id.unique():
    temp = working_df[working_df.location_id == lid].sort_values(['year','week']).reset_index()
    temp["smoothed_fig"] = temp.fig.rolling(window=4, center=False, min_periods=1).mean()
    new_df = new_df.append(temp)

在这种情况下,第 1 周将等于自身,第 2 周等于第 1 周和第 2 周的平均值,依此类推,最大值为 4 周的平均值。问题是,现在我需要将第 1 周设为第 1 周本身和同年第 50、51、52 ​​周以及第 2 周 - 1、2、51、52 ​​周的 4 周平均值,以及第 3 周 - 1,2,3,52 (df 中不存在前一年,但后年存在。我也对下一年执行此程序不感兴趣)。

我考虑通过使用感兴趣的年份的数字在前一年(因为它不存在如上所述)添加几周来做到这一点,然后运行循环。但是我不确定这是否是最好的方法(自己创建这些行),以及最好的方法是什么。我还想知道如何将我需要的几周的 .mean() 分配给我需要的单元格 - 考虑一个 .groupby().mean() 条件只需要我需要的几周,但我不是确定它是否可能以及如果可能的话如何去做。

如果第一种方法更好,我想知道如何在我只需要 2 周平均值和一条线实施的情况下实施第二种方法。

重要说明,因为它用于与下一年进行比较,并且下一年有 53 周,而问题年份没有,所以问题年份的第 53 周等于同年的第 52 周,因此任何答案都带有循环方法应该考虑到这一点。

有什么建议么?

标签: pythonpandasdataframe

解决方案


推荐阅读