条件下的累积总和和计算

时间:2020-06-22 09:20:59

标签: python

所以我有一个带有收盘价和开盘价的数据框,总长度为1066行。我想遍历“信号”列(从第700行开始提供值,我想一直跳过),检查是否为1,然后使用相应列中的值执行计算,然后计算一个新列。我希望代码仅在选中1时执行计算。

假设我有这个数据框:

(我不知道如何发布数据框)

df = pd.DataFrame({'open':[2,4,5,7,5,11], 
                   'close':[0,2,4,3,10,5], 
                   'signal':[np.nan, 0, 1, -1, 1, -1]})

所需的结果就像数据帧的构造如下:

df = pd.DataFrame({'open':[2,4,5,7,5,11], 
                   'close':[0,2,4,3,10,5], 
                   'signal':[np.nan, 0, 1, -1, 1, -1], 
                   'profits':['','',-1,-1,4, 4]})

我已经按照答案编辑了代码。

尽管transaction_count通过了,但我的代码仍然忽略“信号”中的1,它只是计算整个列的累计和。

这是我的代码:

transaction_count = 0
for i in df['signal']:
    if i == 1:
        df['profits'] = (df['close'] - df['open']).cumsum()
        transaction_count +=1
print('transaction count:', transaction_count)
print(df['profits_rf'])

1 个答案:

答案 0 :(得分:2)

[编辑]

在此更新的情况下,您正在混合两个答案。正如@quest所说,您不需要循环。但是,无论如何,您可以创建一个数组并将该数组附加到数据框:

transaction_count = 0
profits = []
cum_sum = 0

for i in range(len(df)):
    if df['signal'][i] == 1:
        cum_sum += df['close'][i] - df['open'][i]
        profits.append(cum_sum)
    else:
        profits.append(cum_sum)

df['profits'] = profits

[OLD]

这似乎是问题所在:

if i in df['signal'] == 1[i]:

您已经在df ['signal']上进行迭代,因此您可以检查i == 1:

if i == 1: