python - 考虑到数据中的周期性边界条件,如何在 python 移动平均中应用
问题描述
我想考虑周期性边界条件来执行移动平均。我试着让自己清楚。
我有这个数据:
Date,Q
1989-01-01 00:00,0
1989-01-02 00:00,1
1989-01-03 00:00,4
1989-01-04 00:00,6
1989-01-05 00:00,8
1989-01-06 00:00,10
1989-01-07 00:00,11
我想考虑 3 个数据来计算移动平均:下一个和上一个。特别是,我想在“滚动”函数中使用相同的选项,其中第一个数据(python 框架中的 0)能够考虑最后一个数据,反之亦然,最后一个数据是第一个数据。这将使我有一种周期性的边界条件。
事实上,我已经应用了以下内容:首先,我阅读了数据框
df = pd.read_csv(fname, index_col = 0, parse_dates=True)
然后我将“滚动”应用为
df['Q'] = pd.Series(df["Q"].rolling(3, center=True).mean())
但是,我得到以下结果:
Date
1989-01-01 NaN
1989-01-02 1.66
1989-01-03 3.66
1989-01-04 6
1989-01-05 8
1989-01-06 9.66
1989-01-07 NaN
我知道我可以应用“min_periods=1”选项,但这不是我想要的。确实,很明显,在第二行中结果是正确的:
1.66 = (0+1+4)/3
但是,我想在第一行得到这个结果:
(0+1+11)/3
如您所见,数字 11 是最后一行的值。同样,我希望在最后一行:
(10+11+0)/3
其中 0 是第一行的值。
你有什么建议或想法吗?
谢谢,
迭戈
解决方案
我只会复制第一个之前和最后一个之后的值,对数据框进行排序,然后进行滚动平均。那么删除附加值就足够了:
df.loc[df.index[0] - pd.offsets.Day(1), 'Q'] = df.iloc[-1]['Q']
df.loc[df.index[-2] + pd.offsets.Day(1), 'Q'] = df.iloc[0]['Q']
df = df.sort_index()
df['Q'] = pd.Series(df["Q"].rolling(3, center=True).mean())
它按预期给出:
Q
Date
1989-01-01 4.000000
1989-01-02 1.666667
1989-01-03 3.666667
1989-01-04 6.000000
1989-01-05 8.000000
1989-01-06 9.666667
1989-01-07 7.000000
推荐阅读
- angular-routing - 将路由外包给组件后触发的根路由中的 PageNotFound 路由
- matlab - Matlab:从另一个 .m 文件调用 .m 文件的函数
- c# - Unicode 字符串不适用于 P/Invoke 中的 void
- angular - 如何格式化角垫日期选择器值
- python - 如何根据布尔掩码过滤 numpy ndarray 的值?
- android - ndk 过滤器不适用于 android 模块
- reactjs - 从动态构建的侧边栏按钮列表中添加/删除活动类
- odoo - 如何将相同的数据传递给 Odoo 中的多个视图?
- python - 在 pandas 中查找只有一个非零值的列
- php - 无法使用 shell_exec 和 curl php 连接到特定网站