在Pandas Dataframe中有条件地填充值

时间:2018-01-05 07:45:01

标签: python pandas dataframe

我有以下数据框:

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中解决这个问题的最佳方法是什么?

1 个答案:

答案 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

等等。这些矢量化操作在大型数据集上应该非常快。