我有以下数据框:

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/

10-12 00:13
查看更多