【问题标题】:Creating series from variables updated every minute从每分钟更新的变量创建系列
【发布时间】:2019-02-27 21:44:42
【问题描述】:

所以我制作了一个程序,其中下面的变量 fastMA 和 slowMA 每分钟计算一次(下面)。我试图找出一种方法将它们计算的每个实例添加到一个系列中,以便我可以将最近一分钟的值与最后一分钟的值进行比较。所以我只需要两个最近的计算。

if len(dfC) >= 75:

    fastMAcloses = pd.DataFrame(dfC.tail(20)).values
    fastMA = fastMAcloses.sum() / 20
    print(fastMA)

    slowMAcloses = pd.DataFrame(dfC.tail(75)).values
    slowMA = slowMAcloses.sum() / 75
    print(slowMA)

else:
    print('... calculating MAs in', 75 - len(dfC), 'min')

到目前为止,我想出的是:

    columnsMA = ['Fast MA:', 'Slow MA:']
    valuesMA = [fastMA, slowMA]
    listMA = list(valuesMA)
    seriesMA = pd.Series(listMA, columnsMA)
    print(seriesMA)

但是,每次计算时,新的分钟值都会覆盖之前的值,因此无法进行比较。如果你能帮上忙,我非常感谢!

【问题讨论】:

  • shift() 方法可能会有所帮助。例如df['a'].shift() 将是一个具有相同长度的新系列,但每一行向下移动一个,所以说df['a'] + df['a'].shift() 将是当前值和前一个值的总和。

标签: python python-3.x pandas series


【解决方案1】:

您可以尝试类似以下的方法:

columnsMA = ['Time:','Fast MA:', 'Slow MA:']

#Initiate results
results=pd.DataFrame([[datetime.datetime.now(),fastMA,slowMA]],columns=columnsMA)
                print(results)

#Append to results (say every minute)
dfTemp=pd.DataFrame([[datetime.datetime.now(),fastMA,slowMA]],columns=columnsMA)
results=results.append(dfTemp,ignore_index=True)
print(results)

#Append to results (say every minute)
dfTemp=pd.DataFrame([[datetime.datetime.now(),fastMA,slowMA]],columns=columnsMA)
results=results.append(dfTemp,ignore_index=True)
print(results)

    ... keep appending to the dataframe ....

还有一个 concat 函数,您可以进一步研究。

我想如果你只想在内存中保留 2 分钟的数据而不是完整的历史记录,你可以从尾部和新的计算结果构建一个数据框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    相关资源
    最近更新 更多