python - 熊猫数据框迭代并与前一行计算的状态进行比较
问题描述
我想知道如何矢量化这个逻辑:如果 10SMA>30SMA>100SMA 但在前一行中这个条件不正确并且前一行不是,则创建一个新列 (df['state'])状态='开始交易'。Subsequest 行需要是状态“inTrade”或类似的东西。
'exitTrade' 如果 10SMA<30SMA 并且在前一行的状态是 = 'inTrade'
我正在使用 python for-loop 进行编码并且正在运行,但我认为知道如何使用 lambda 或任何其他方式来矢量化和使用数据帧的哲学并避免 python 循环引用先前的计算结果会非常有趣.
解决方案
Use the index attribute of the Dataframe :
df = pd.DataFrame(...)
for i in df.index:
if df['10SMA'][i] > df['30SMA'][i] > df['100SMA'][i] and df['state'][i-1] != 'startTrade':
df['state'][i] = 'startTrade'
elif df['10SMA'][i] < df['30SMA'][i]:
df['state'][i] = 'exitTrade'
else:
df['state'][i] = 'inTrade'
推荐阅读
- java - 将游戏窗口移到其他窗口 LibGDX 前面
- mysql - 从其他表中选择满足自定义过滤器的 MySQL 记录作为 1-n 关系
- angular - 角度 4 中的 mat-select 和 mat-option 冲突 ElementRef 和模板门户
- mongodb - Mongo DB 查询仅获取一个具有外部 ID 的文档
- c# - 必须声明标量变量 错误消息
- vb.net - Visual Basic Web API 使用 mq 系列消息传递,但从不释放连接
- google-cloud-sql - 将 sql 转储文件从工作台导入 Cloud SQL
- php - PHP隐藏数据如果mysql字符串为空
- python - pandas.plot 参数 c vs s
- java - 点击时不正确的 CardView 展开/折叠