有条件地填充数据帧中的值

2024-09-30 14:38:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

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

我添加了另外两个包含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

我所要做的是按照以下条件填充开长、关长和长:

对于所有3列,第一行将为0,然后对于下一列:

  • 打开长时间:如果前一行long_entry == 0和同一行long_entry==True,则open_long = 1,否则open_long = 0

  • close\u 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

我可以用loop来完成,但是因为我每天都要处理10年的数据,所以要花很多时间才能完成。用Python解决这个问题的最佳方法是什么?你知道吗


Tags: 数据loopfalsetruedataframeclose时间exit
1条回答
网友
1楼 · 发布于 2024-09-30 14:38:38

您可以使用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

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

相关问题 更多 >