【发布时间】:2023-01-25 20:06:06
【问题描述】:
我正在尝试计算个股的 CAPE 比率(链接如下,但您不太可能需要知道它才能回答问题)。
我的数据框有每股收益(“EPS”)和 CPI(“CPI 值”)的季度数据。我想计算 10 年(40 个季度)通胀调整后的平均市盈率。
因此,对于新列的每一行,计算需要:
- 40 期回顾
- 周期开始时 CPI 与当前 CPI 的比率(在每个回溯窗口开始时从 1 开始,并逐渐降低以说明通货膨胀)
- 这个CPI比率乘以当前EPS值
- 窗口所有这些乘法的平均值
例如-第 i 天的 CAPE:
CAPE[i] = ((CPI[i-40] / CPI[i-40]) * EPS[i-40]), (CPI[i-40] / CPI[i-39]) * EPS[ i-39], ... , (CPI[i-40] / CPI[i]) * EPS[i]))
似乎很清楚需要使用“滚动”,可能需要使用“聚合”功能。
我很难做到这一点,因为计算需要数据框中的两列而不是一列,而且我不确定如何在滚动函数中访问它们。
也不要认为“帮助”列有用,因为每个回溯窗口的值都会发生变化。
下面的玩具示例代码:
df = pd.DataFrame(index = range(100))
df['CPI Value'] = 1. + (df.index / 100.)
df['EPS'] = 10.
&这是我的非工作尝试:
df['CAPE'] = df.rolling(40).agg(lambda x: ((x['CPI Value'][0] / x['CPI Value']) * x['EPS']).mean())
【问题讨论】:
标签: python pandas dataframe rolling-computation