【问题标题】:Pandas: rolling window calculation requiring input from 2 columns熊猫:需要从 2 列输入的滚动窗口计算
【发布时间】:2023-01-25 20:06:06
【问题描述】:

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

Link to CAPE definition

我的数据框有每股收益(“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


    【解决方案1】:

    即使它看起来相对微不足道,也无法让它与 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'])
    

    【讨论】:

      猜你喜欢
      • 2018-07-10
      • 1970-01-01
      • 2017-03-30
      • 2018-09-02
      • 1970-01-01
      • 2019-11-19
      • 2020-06-13
      • 2020-04-21
      • 2021-03-30
      相关资源
      最近更新 更多