我有以下数据框:
temp = pd.DataFrame({
'long_entry':[False,True,False,False],
'long_exit':[False,False,False,True]
})
long_entry long_exit
0 False False
1 True False
2 False False
3 False True
我再添加2列,其中0将接收条件值:
temp['open_long']=0
temp['close_long']=0
temp['long']=0
long_entry long_exit open_long close_long long
0 False False 0 0 0
1 True False 0 0 0
2 False False 0 0 0
3 False True 0 0 0
我想要做的是根据以下条件填写open_long,close_long和long:
对于所有3列,第一行将为0,然后是下一行:
open_long :如果上一行long_entry == 0
且同一行long_entry
== True
然后open_long = 1
,则为open_long = 0
}
close_long :如果上一行long
值等于1
且同一行long_exit == True
,则close_long = -1
,否则{{1 }}
长:恰好等于同一行close_long= 0
+同一行open_long
+前一行
生成的Dataframe是:
close_long
我能够使用循环来完成它,但由于我使用10年的每日数据,因此需要花费大量时间才能完成。在Python中解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
您可以使用shift()
方法执行以下操作。
temp['long_entry_lag'] = temp['long_entry'].shift(-1)
,结果将是:
long_entry long_exit long_entry_lag
0 False False True
1 True False False
2 False False False
3 False True NaN
然后你可以这样做:
temp['open_long'] = (temp.long_entry - temp.long_entry_lag) == -1
等等。这些矢量化操作在大型数据集上应该非常快。