Python 从时间序列数据中查找出入口信号

Python 从时间序列数据中查找出入口信号,python,python-3.x,time-series,Python,Python 3.x,Time Series,我有一个小的时间序列数据: ser = pd.Series([2,3,4,5,6,0,8,7,1,3,4,0,6,4,0,2,4,0,4,5,0,1,7,0,1,8,5,3,6]) 假设我们选择5作为进入市场的门槛,选择0作为退出市场的门槛 我正在尝试编写一个程序,该程序将生成如下输出: 到目前为止,我已经使用了numba,但仍在处理逻辑问题。请您帮忙 @numba.vectorize def check_signal(x,t): if x >= t : y

我有一个小的时间序列数据:

ser = pd.Series([2,3,4,5,6,0,8,7,1,3,4,0,6,4,0,2,4,0,4,5,0,1,7,0,1,8,5,3,6])
假设我们选择5作为进入市场的门槛,选择0作为退出市场的门槛

我正在尝试编写一个程序,该程序将生成如下输出:

到目前为止,我已经使用了numba,但仍在处理逻辑问题。请您帮忙

@numba.vectorize 
def check_signal(x,t):
    if x >= t :
        y = 2
    if x < t :
        y =1 
    if x == 0:
        y = -1
    else :
        y = y
    return y 
@numba.vectorize
def检查_信号(x,t):
如果x>=t:
y=2
如果x
除非您有数以千万计的样本,否则为什么要使用numba

states = ["Entered market", "inside market", "market exit", "outside market"]
state = 2
fout = open('seriesdata.csv','w')
print("Time,Percent_change,Signal,Timestamp", file=fout)
for pct in ser:
    stamp = ''
    if state == 1 and pct == 0:
        state = 2
        stamp = str(len(data)+1)
    elif state == 3 and pct >= 5:
        state = 0
        stamp = str(len(data)+1)
    else if state in (0, 2):
        state += 1
    print(''.join((str(pct), states[state], stamp)), file=fout)

如果你想创建一个数据框,只需将这些值累积到一个列表中,然后再进行转换。

谢谢你的快速回复Tim,实际上我的数据框有2400万行,所以我试图用numba解决它。那么这有什么意义呢?你不可能使用2400万行的人类可读数据。通过时间序列上的这些标记,我想确定该值超过阈值的多少倍,即我们可以进入市场,一旦进入,我想保持在零,直到遇到零,一旦遇到零,应记录为退出点,然后,直到百分比变化保持在阈值以下,我们保持在市场之外,当它超过阈值时,它被记录为进入市场。最后,我希望能够计算这些事件发生的频率及其在不同阈值下的持续时间。因此,通过一个包含2400万行的时间序列,我可以以数据框的形式总结出这些市场进入-退出周期的变化百分比的不同阈值。这些事件的分布情况如何持续时间