我的数据里有时间序列数据。有什么方法可以计算每天的百分比变化,从前7天的平均值?
我试过了
df['Change'] = df['Column'].pct_change(periods=7)然而,这只是找出t和t-7天之间的差别。我需要这样的东西:
对于每一个Ti值,找出前7天的平均值,然后减去Ti
发布于 2021-04-21 14:58:53
当然,您可以例如使用:
s = df['Column']
n = 7
mean = s.rolling(n, closed='left').mean()
df['Change'] = (s - mean) / mean关于closed='left'的注记
在错误之前有一个pandas=1.2.0,它导致不正确地处理固定窗口的closed。确保您有pandas>=1.2.0;例如,pandas=1.1.3不会给出下面的结果。
如文档所述
closed:使间隔在“右”、“左”、“两者”或“两者都”的端点上关闭。默认为“右”。
一个简单的理解方法是尝试使用一些非常简单的数据和一个小窗口:
a = pd.DataFrame(range(5), index=pd.date_range('2020', periods=5))
b = a.assign(
sum_left=a.rolling(2, closed='left').sum(),
sum_right=a.rolling(2, closed='right').sum(),
sum_both=a.rolling(2, closed='both').sum(),
sum_neither=a.rolling(2, closed='neither').sum(),
)
>>> b
0 sum_left sum_right sum_both sum_neither
2020-01-01 0 NaN NaN NaN NaN
2020-01-02 1 NaN 1.0 1.0 NaN
2020-01-03 2 1.0 3.0 3.0 NaN
2020-01-04 3 3.0 5.0 6.0 NaN
2020-01-05 4 5.0 7.0 9.0 NaNhttps://stackoverflow.com/questions/67198216
复制相似问题