首页 > 解决方案 > 熊猫数据框迭代并与前一行计算的状态进行比较

问题描述

源数据框

我想知道如何矢量化这个逻辑:如果 10SMA>30SMA>100SMA 但在前一行中这个条件不正确并且前一行不是,则创建一个新列 (df['state'])状态='开始交易'。Subsequest 行需要是状态“inTrade”或类似的东西。

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

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

标签: pythonpandasdataframe

解决方案


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'

推荐阅读