【问题标题】:How can I create a multi-indexed pandas dataframe within a for loop?如何在 for 循环中创建多索引 pandas 数据框?
【发布时间】:2019-12-07 16:02:39
【问题描述】:

我有一个包含多个变量的每周时间序列,我正在尝试查看过去 26 周相关性与之前所有 26 周相关性的百分比排名。

所以我可以使用 pandas 中的 pd.corr 函数生成前 26 周的相关矩阵,但我不知道如何循环遍历所有以前的周期,也可以找到这些相关性的不同值然后进行排名。

我希望有更好的方法来实现这一点,如果有,请告诉我

我已经尝试计算并行数据帧,但我无法编写一个公式来对最近的数据帧进行排名 - 所以我相信解决方案在于多索引。

'''蟒蛇

    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,2,3 是星期,对吧?你想拥有最后的 26 周吗?但那是什么列呢?过去 26 周的平均汇率?如果是这样,我猜平均和单周之间的相关性为 1 是不现实的,对吧?
  • 您好,给出的示例是针对输出的,因此 1、2、3,每个都表示前 1,2 和 3 个 26 周期间的相关性。列和行都是资产 - 1 的相关性是因为变量具有完全相同的差异(在这种情况下它是相同的变量)。
  • 您的数据框是否只包含每个交易品种和每周的一个价格?你的周数是多少,还是只有日期?
  • 输入数据的样本可能会有所帮助。
  • 数据框有超过 500 次每周更改 20 多个变量,并且以日期值给出周数

标签: python pandas dataframe multidimensional-array indexing


【解决方案1】:

这里是您如何解决问题的收据。 我假设,您每周有一个价格(否则只需预先聚合您的数据框)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多