我需要一个遍历position列所有行的for循环,并根据该列上的上一个项目根据某些规则填充当前位置。例如,如果位置的先前值是零,则该函数将检查价格是高于还是低于某个特定值,并采取相应的措施。
问题是,尝试在循环内将索引减少1无效。
我看到了其他类似的问题,但是答案指向在循环外部创建另一个已平移的位置列,然后使用该位置列。这些解决方案不起作用的原因是,位置列随着循环的继续而变化,并且这种变化需要加以考虑。
#position column
df['position']=0
df.position = np.where(df.price >= alo2,alo2_tsd,0)
df.position = np.where(df.price <= blo2, blo2_tsd,0)
for index in range(0,df.shape[0]):
if df.loc[index-1,'position'] == 0:
if df['price'][index] < alo2 and df['price'][index] >= alo1: #set first upside hedge
df.loc[index,'position'] = alo1_lots
elif df['price'][index] > blo2 and df['price'][index] <= blo1: #set first downside hedge
df.loc[index,'position'] = blo1_lots
else:
continue
这给了我keyerror:-1。如果我用“ index + 1”代替“ index-1”(只是试图查看-1是否是实际问题),它将给我KeyError:(0,“位置”)。如果我完全删除-1,代码似乎可以正常运行(尽管当然不会产生我需要的输出)。
感谢您的帮助。在回答时,请记住,这不是我循环中唯一的if语句。我有多个其他人,因此我需要有效的解决方案。