问题描述
我在DataFrame上执行了pd.Series.rolling()操作。
这是一个最小的示例:
import random
import pandas as pd
def rnd_walk(n):
x = 0
for i in range(n):
r = random.random()
if r > 0.5:
x =+ random.random()
else:
x -= random.random()
yield x
df = pd.DataFrame({'DATA':list(rnd_walk(100))})
df['SMA_7'] = df.DATA.rolling(window=7).mean()
df.tail(10)
DATA SMA_7
90 0.143081 0.204043
91 -0.624594 0.231501
92 0.457923 0.275728
93 0.210151 0.223075
94 0.234321 0.163321
95 -0.218407 0.128217
96 -0.978240 -0.110824
97 0.045524 -0.124760
98 0.151820 -0.013844
99 0.036074 -0.074108
在那之后,我需要向DataFrame添加一些额外的行。
df = df.append(pd.DataFrame({'DATA':list(rnd_walk(5))})).reset_index(drop=True)
df.tail(10)
DATA SMA_7
95 -0.218407 0.128217
96 -0.978240 -0.110824
97 0.045524 -0.124760
98 0.151820 -0.013844
99 0.036074 -0.074108
100 -0.089913 NaN
101 0.518280 NaN
102 0.205221 NaN
103 0.101302 NaN
104 0.309708 NaN
我现在的问题是,如何只为最后添加的值计算SMA_7
,而不必在整个DataFrame上重复计算?是否有一种通用的方法可以缓存计算并从第99行开始恢复计算,即不重复任何先前已经完成的计算?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)