我目前有两个数据帧,并希望根据满足的两个条件创建第三个数据帧:如果数据帧1中的相应值刚刚超过2并且数据帧2的值是< =则为TRUE 0.2,否则为FALSE。
DF1
DF2
代码应该按如下方式创建df3:
,即13-aug-17的5y条件仅为5,因为5y已超过2且df2中的值<= 0.2。
这样做的目的是复制在此处mean reversion strategy完成的整个数据框,而不仅仅是单个时间序列,即对于示例中的每个步骤,执行数据框,而不是时间序列级别。
所以问题是如何在数据框而不是列级应用下面的移位函数。
df4['short entry'] = ((df4.zScore < - entryZscore) & ( df4.zScore.shift(1) > - entryZscore)&(df4['hurst'] < hurstentry))
答案 0 :(得分:1)
简短回答:
df3 = ((df1 > -entryZscore) & (df1.shift(1) < -entryZscore) & (df2 < hurstentry))
我不确定是否理解均值回归策略问题,但如果entryZscore和hurstentry对于所有列都相同,则可以尝试:
import pandas as pd
date_index = pd.date_range('2017-08-10', '2017-08-13')
cols = ['2y','5y','10y']
df1 = pd.DataFrame([[1.3,1.3,1.3],[1.4,1.4,1.4],[1.9,2.1,1.9],[1.9,1.9,1.9]],
columns=cols, index=date_index)
df2 = pd.DataFrame([[0.3,0.3,0.3],[0.1,0.1,0.1],[0.1,0.1,0.1], [0.3,0.3,0.3]],
columns=cols, index=date_index)
entryZscore = -2
hurstentry = 0.2
df3 = ((df1 > -entryZscore) & (df1.shift(1) < -entryZscore) & (df2 < hurstentry))
输出:
2y 5y 10y
2017-08-10 False False False
2017-08-11 False False False
2017-08-12 False True False
2017-08-13 False False False
答案 1 :(得分:0)
这可能会有所帮助
SELECT t1.*, MAX(t2.id) as max_t2id
FROM table1 t1 JOIN
table2 t2
ON t1.id = t2.idTable1
GROUP BY t1.id;
输出为
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
我不推荐以上方法。看起来有点乱。如果可能,您可以有三个数据框。每个帧将保存单个持续时间的数据。即1年5年相关数据的数据框架,1年10年和1年2年。您可以创建一个解析单个数据框的函数。这样,您就可以从均值回归样本中复制代码。理解数学比以复杂方式处理数据更为重要。希望它有所帮助。