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]})
我已经根据答案编辑了代码。
我的代码仍然忽略“信号”中的 1,它只是计算整个列的累积和,尽管 transaction_count 通过了。
这是我的代码:
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'])
解决方案
[编辑]
在这个更新的案例中,您混合了两个答案。正如@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
[老的]
这部分似乎是问题所在:
if i in df['signal'] == 1[i]:
你已经在迭代 df['signal'] 所以你可以检查 i == 1:
if i == 1:
推荐阅读
- javascript - 动态更改已在 JavaScript 中创建的实例的值
- python - PyTorch:tensor.cuda() 和 tensor.to(torch.device("cuda:0")) 有什么区别?
- ios - 如何向 UITextView 中的属性文本添加自定义操作?
- datepicker - 需要在 Materialise Date Picker 中隐藏当年的未来月份。当我从选择器更改年份时,所有月份都应该出现
- spring - 加入 Fetch 与右表上的条件
- django - 拒绝在框架中显示,因为它在 django 应用程序中将“X-Frame-Options”设置为“拒绝”
- java - 在 Java 中不使用类创建对象
- kubernetes - 基于 Kubernetes 中指定的传入端口的负载均衡(本地)
- ios - UITableViewCell 的阴影大小不正确
- php - 有没有办法对字符串进行排序并删除重复项?