Pandas 数据框迭代并与前一行计算的状态进行比较

时间:2021-07-31 21:11:53

标签: python pandas dataframe

Source dataframe

我想知道如何向量化这个逻辑: 创建一个具有值的新列 (df['state']) 'startTrade' 如果 10SMA>30SMA>100SMA 但在前一行这个条件不成立 并且前一行不是 state='startTrade'。 Subsequest 行需要是状态“inTrade”或类似的东西。

'exitTrade' 如果 10SMA<30SMA 并且在前一行状态是 = 'inTrade'

我正在使用 python for-loop 进行编码并且正在运行,但我认为知道如何使用 lambda 或任何其他方式来引用以前的计算结果来向量化和使用数据帧的哲学会非常有趣,并且避免python循环。

1 个答案:

答案 0 :(得分:0)

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'