这可能是一些有助于
import pandas as pd
import numpy as np
df1 = pd.DataFrame([['11',1.3,1.3,1.3],['12',1.4,1.4,1.4],['13',1.9,2.1,1.9], ['14',1.9,1.9,1.9]])
df1.columns = ['date','2y','5y','10y']
df2 = pd.DataFrame([['11',0.3,0.3,0.3],['12',0.1,0.1,0.1],['13',0.1,0.1,0.1], ['14',0.3,0.3,0.3]])
df2.columns = ['date','2y','5y','10y']
df = pd.merge(df1, df2, on='date', suffixes=['_zscore','_hurst'])
entryZscore = -2
hurstentry = 0.2
for x in ['2y','5y','10y']:
df[x+'_short'] = ((df[x+'_zscore'] > -entryZscore) & (df[x+'_zscore'].shift(1) < -entryZscore)&(df[x+'_hurst'] < hurstentry))
entries = ['date'] + [x+'_short' for x in ['2y','5y','10y']]
result = df[entries]
print result
输出
date 2y_short 5y_short 10y_short
0 11 False False False
1 12 False False False
2 13 False True False
3 14 False False False
我不建议以上做法。这似乎有点混乱。如果可能的话,你可以有三个数据框。每帧将保存单个持续时间的数据。即5年相关数据的1个数据帧,10年1个和2年1个。您可以创建一个函数来解析单个数据帧。通过这种方式,您可以复制平均回归示例中的代码。理解数学比以复杂的方式处理数据更重要。希望能帮助到你。
为什么10y 13-Aug-17是错误的?在DF1为10Y 13 - 8 - 17值是2.3,其大于2. 10Y 13 - 8 - 17 DF2值为0.1,这是小于0.2。在df3中应该是真的,10y 13-Aug-17,对吧? – White
我已阅读上面提到的平均回复策略。如果您的目标是在不同的持续时间,即2年,5年或10年使用均值回复。我想你可能会找到在数据帧级别上运行的方法。但是,其他人理解它可能并不容易。您可以考虑一个for循环,并将您的数据框列命名为'zscore_2y','zscore_5y'。如果需要,我的理解是正确的,我可以提供一个样本来进一步说明我的想法。 – White
10y 13-aug-17是错误的,因为df1需要刚好超过2。10y 12-aug-17也是> 2,所以只有在时间t的df中的对应值大于2并且t-1 <2时才满足TRUE条件。 –