我有以下数据框:
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
,否则为close_long= 0
long:等于同一行
open_long
+同一行close_long
+上一行long结果数据框为:
long_entry long_exit open_long close_long long
0 False False 0 0 0
1 True False 1 0 1
2 False False 0 0 1
3 False True 0 -1 0
我可以使用循环来完成此操作,但是由于我要处理10年的每日数据,因此需要花费大量时间才能完成。在Python中解决此问题的最佳方法是什么?
最佳答案
您可以使用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
等等。这些矢量化操作在大型数据集上应该非常快。
关于python - 有条件地填充Pandas Dataframe中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48109266/