我正在尝试遍历数据框,并根据规则用值填充新列:
#formula for trading strategy
df['new_column'] = ""
for index,row in df.iterrows():
if row.reversal == 1:
row.new_column = 1
index += 126
row.new_column = -1
else:
row.new_column = 0
此公式用于以以下方式填充新列:反转= 1时,给定值1,随后的125行为0,第126行为-1。然后,它应该再次开始查看反转列的第127个项目是1(表示反转)还是0,依此类推。相反,如果反转!= 1,则给出值0。
问题是当我查看形成的新列时,它仍然是一个空列。我在其中输入值的方式一定存在错误。我研究了其他方法来构造数据帧的if语句(例如lambda),但是它们不允许我执行此代码中的所有操作
答案 0 :(得分:0)
new_column的值可以是:0、1或-1, 我建议您一开始将0装入您的列,因此无需设置0:
df['new_column'] = 0
index = 0
while index < df.shape[0]:
if df['reversal'][index] == 1:
df.loc[index,'new_column'] = 1 #set 1 to same index
df.loc[index + 126, 'new_column'] = -1 #set -1 to 126th row
index = index + 127 #inc index to next loop
else:
index = index + 1
请注意,索引的值不能大于数据帧的行数
您可以修改测试以保护循环(避免出现错误消息):
if df['reversal'][index] == 1 and (index + 126) < df.shape[0]: