我有一个看起来像这样的DataFrame:
a b
1 0.9 0.796522123
2 0.8 0.701075019
3 0.6 0.777130253
4 0.5 0.209912906
5 0.75 0.920537662
6 1 0.955212665
7 3.5 0.227221963
8 2 0.336632891
9 1.25 0.563511758
10 1 0.832624112
我想创建一个最大周期为3的移动平均线,其中每个观测值为df['a']*df['b
]。
如果df['a'].rolling(window=3).sum() <= 3
,那么MA将是:
df['MA'] = (df['a']*df['b']).rolling(window=3).mean()
。
但是,例如,如果是df['a'].rolling(window=3).sum() > 3
,就像df[8:10]
一样,那么我希望移动平均值为:
((1*0.83)+(1.25*0.832624112)+(0.75*0.336632891))/3
。
我一直在玩弄创建一个函数然后应用它,比如:
def MA(a, b, period):
total = 0
sum_a = 0
for i in (b):
if sum_a < period:
sum_a += a
total += (a*b)
else:
sum_a = sum_a - a
diff = period - sum_a
total = total + (diff*b)
return total
df['MA'] = df.apply(lambda x: MA(a, b, period), axis=1)
我无法解决此问题,我认为使用pandas
或numpy
可以更轻松地执行此操作。
非常感谢提前。
答案 0 :(得分:1)
Run Keyword And Return Status