我想通过以下代码寻求帮助:
di = (sm - 1.0) / 2.0 + 1.0
c1 = 2 / (di + 1.0)
c2 = 1 - c1
c3 = 3.0 * (cd * cd + cd * cd * cd)
c4 = -3.0 * (2.0 * cd * cd + cd + cd * cd * cd)
c5 = 3.0 * cd + 1.0 + cd * cd * cd + 3.0 * cd * cd
asset['i1']=0
asset['i2']=0
asset['i3']=0
asset['i4']=0
asset['i5']=0
asset['i6']=0
asset['i1'] = c1*asset['C'] + c2*(asset['i1'].shift(1))
asset['i2'] = c1*asset['i1'] + c2*(asset['i2'].shift(1))
asset['i3'] = c1*asset['i2'] + c2*(asset['i3'].shift(1))
asset['i4'] = c1*asset['i3'] + c2*(asset['i4'].shift(1))
asset['i5'] = c1*asset['i4'] + c2*(asset['i5'].shift(1))
asset['i6'] = c1*asset['i5'] + c2*(asset['i6'].shift(1))
如何更改代码,因此对于每个新计算的行都使用上一个行的计算?问题是当前当前使用的是前一行的0。 目标是在Python中计算珊瑚趋势指标。有一个名为“ asset”的熊猫数据框,其中包含价格和日期作为时间戳。 值c1,c2,c3,c4,c5是指示符常数。我们需要为整个数据帧计算“ i1,'i3'... i6”。每行都是从上一行计算的,因此应该在数据帧上使用“应用”功能,因为当前它正在计算整列(使用先前定义的零,而不是前一行的实际值)。 数据框很大,有没有更快的方法,因为在熊猫数据框中使用“ for”花费了很多时间
谢谢
答案 0 :(得分:1)
只需创建一个for循环并保存之前的变量,如下所示:
di = (sm - 1.0) / 2.0 + 1.0
c1 = 2 / (di + 1.0)
c2 = 1 - c1
c3 = 3.0 * (cd * cd + cd * cd * cd)
c4 = -3.0 * (2.0 * cd * cd + cd + cd * cd * cd)
c5 = 3.0 * cd + 1.0 + cd * cd * cd + 3.0 * cd * cd
asset['i1'] = c1*asset['C'] + c2*(asset['i1'].shift(1))
var = asset['i1']
for index in range(2,7):
asset['i'+ str(index)] = c1*var + c2*(asset['i'+ str(index)].shift(1))