Pandas:滚动窗口计算需要从2列输入



我正试图计算个股的CAPE比率(链接如下,但你不太可能需要知道它来回答这个问题)。

链接到CAPE定义

我的数据框架有每股收益("EPS")和CPI("CPI值")的季度数据。我希望计算10年(40个季度)通货膨胀调整后的平均市盈率。

对于新列的每一行,计算需要:

  • a 40周期回顾
  • 期初CPI与当期CPI之比(在每个回顾窗口开始时从1开始,并逐渐降低以考虑通货膨胀)
  • 该CPI比率乘以当前EPS值
  • 窗口
  • 所有这些乘法的平均值

eg- CAPE on day 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]))

似乎相当清楚,需要使用'滚动',可能与'agg'函数一起使用。

我正在努力做到这一点,因为计算需要数据框架的两列,而不是只有一个,我不确定如何在滚动函数中访问它们。

也不要认为'helper'列是有用的,因为每个回看窗口的值都会改变。

示例代码:

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())

无法让它与pandas一起工作,尽管它看起来相对微不足道,不断出现语法错误或没有传递正确的参数。

Numpy-extended的rolling_apply函数似乎已经工作了。

from numpy_ext import rolling_apply
def func(a,b): return np.mean((a.iloc[0] / a) * b)
df['inf_adj'] = rolling_apply(func, 40, df['CPI Value'], df['EPS'])

相关内容

  • 没有找到相关文章