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万行的时间序列,我可以以数据框的形式总结出这些市场进入-退出周期的变化百分比的不同阈值。这些事件的分布情况如何持续时间