如何在for循环中创建多索引的熊猫数据框?

时间:2019-07-30 09:37:55

标签: python pandas dataframe multidimensional-array indexing

我每周有多个变量的时间序列,我试图查看与过去所有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

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。我假设请检查/更改字段名称。