我每周有多个变量的时间序列,我试图查看与过去所有26周相关性相比,最近26周相关性排名的百分比。
因此,我可以使用pandas中的pd.corr函数为前26周的周期生成一个相关矩阵,但是我不知道如何遍历所有先前的周期,也无法找到这些相关的不同值然后进行排名。
如果可以的话,我希望有更好的方法来实现这一目标,
我曾尝试计算并行数据帧,但我无法编写公式来对最新数据进行排名-因此,我相信解决方案在于多索引。
'''python
daterange = pd.date_range('20160701', periods = 100, freq= '1w')
np.random.seed(120)
df_corr = pd.DataFrame(np.random.rand(100,5), index= daterange, columns = list('abcde'))
df_corr_chg=df_corr.diff()
df_corr_chg=df_corr_chg[1:]
df_corr_chg=df_corr_chg.replace(0, 0.01)
d=df_corr_chg.shape[0]
df_CCC=df_corr_chg[::-1]
for s in range(0,d-26):
i=df_CCC.iloc[s:26+s]
我正在寻找一个显示不同时间相关性的多索引表
输出示例 例如(格式问题)
a b
a 1 1 -0.101713
2 1 -0.031109
n 1 0.471764
b 1 -0.101713 1
2 -0.031109 1
n 0.471764 1
答案 0 :(得分:0)
这里是如何解决该问题的摘要。 我认为,您每周有一个价格(否则,只汇总您的数据框)。
# in case you your weeks are not numbered
# Sort your dataframe for symbol (EUR, SPX, ...) and week descending.
df.sort_values(['symbol', 'date'], ascending=False, inplace=True)
# Now add a pseudo
indexer= df.groupby('symbol').cumcount() < 26
df.loc[indexer, 'pricecolumn'].corr()
另一个提示,以防您需要预聚合数据框。您可以在框架中添加另一个带有星期编号的辅助列,例如:
df['week_number']=df['datefield'].dt.week
然后,我想您希望获得每周的最新价格。您可以按照以下步骤进行操作:
df_last= df.sort_values(['symbol', 'week_number', 'date'], ascending=True, inplace=False).groupby(['symbol', 'week_number']).aggregate('last')
df_last.reset_index(inplace=True)
然后使用df_last
代替上面的df
。我假设请检查/更改字段名称。