如何考虑数据中的周期性边界条件在python移动平均中应用

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

我想考虑周期性边界条件进行移动平均。我试图让自己更清楚。

我有此数据:

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是第一行的值。

您有什么建议或想法吗?

谢谢,

迭戈

python pandas moving-average
1个回答
1
投票
我只需要在第一个值之前和最后一个值之后复制值,对数据框进行排序,然后进行滚动平均。然后删除添加的值就足够了:

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

© www.soinside.com 2019 - 2024. All rights reserved.