首页 > 解决方案 > 循环创建 df 列,其值取决于列标题中的数字

问题描述

我正在构建一个计算投资组合历史波动率的 df。我需要计算投资组合过去 50 天每一天的历史波动率。

我有一个列标题为“偏移 0”到“偏移 49”的 df,我的计划是使用创建的变量来设置公式中的列来循环计算历史波动率的列。

df = pd.DataFrame(0,columns=['Offset 0','Offset 1', 'Offset 2'...'Offset 49']

填充df的正确公式是

df['Offset 0'] = (((percentage_weights.values * ln_returns.shift(0).values).sum(axis = 1))*(np.sqrt(365/days.shift(0))))**2

在这里,我有 3 个输入 dfs 来计算历史波动率。(percentage_weights、ln_returns 和天)

我正在寻找一个循环来遍历列并通过列标题中的变量更改 shift 参数。所以 df['Offset 1'] 的正确公式是:

df['Offset 1'] = (((percentage_weights.values * ln_returns.shift(1).values).sum(axis = 1))*(np.sqrt(365/days.shift(1))))**2

我努力了 :

 for col in df.columns:
    for p in range(0,49):
        df[col] = (((percentage_weights.values * ln_returns.shift(p).values).sum(axis = 1))*(np.sqrt(365/days.shift(p))))**2

但这只是给了我 df['Offset 0'] 无处不在的值。

标签: pandasdataframeloops

解决方案


推荐阅读