【问题标题】:Reset Window for EWM in Pandas DataframePandas Dataframe 中 EWM 的重置窗口
【发布时间】:2021-06-19 10:21:06
【问题描述】:

我正在尝试使用以下 pandas 数据框计算 ewm:

Parameter new_file EWM
0 495.56912 0 495.569120
1 494.51257 1 495.505727
2 493.65040 1 495.394407
3 492.95905 1 495.248286
4 492.31470 1 495.072271
5 491.66367 0 491.663670
6 491.05520 1 494.639001
7 490.38733 1 494.383901

我想要的是每次“new_file”列中的值为 0 时重置窗口。此数据框是从多个输入文件创建的,每次 new_file 列为 0 时,它都表示新文件的开始。因此,我不希望 EWM 使用上一个输入文件的最后一个值进行计算,我需要将其重置。

我创建 EWM 列的代码如下:

  df['EWM'] = np.where(df[‘new_file’] ==1, df['Parameter'].ewm(alpha=0.06,adjust=False).mean() , df['Parameter'])

您可能可以从上面的数据框摘录中看到,计算的第 6 行不是作为新窗口开始时应有的值。它应该产生以下值(我从 excel 中获得):

Parameter new_file EWM
0 495.56912 0 495.5691
1 494.51257 1 495.5057
2 493.6504 1 495.3944
3 492.95905 1 495.2483
4 492.3147 1 495.0723
5 491.66367 0 491.6637
6 491.0552 1 491.6272
7 490.38733 1 491.5528

【问题讨论】:

    标签: python pandas window exponential


    【解决方案1】:

    我们可以创建一个布尔掩码来检查新文件的开始,然后计算此掩码上的累积和以识别属于同一文件的行块,然后在这些块上groupParameter 列并计算指数加权平均值

    b = df['new_file'].eq(0).cumsum()
    df['EWM'] = df['Parameter'].groupby(b, group_keys=False)\
                               .ewm(alpha=0.06, adjust=False).mean()
    

       Parameter  new_file         EWM
    0  495.56912         0  495.569120
    1  494.51257         1  495.505727
    2  493.65040         1  495.394407
    3  492.95905         1  495.248286
    4  492.31470         1  495.072271
    5  491.66367         0  491.663670
    6  491.05520         1  491.627162
    7  490.38733         1  491.552772
    

    【讨论】:

    • 谢谢。虽然我在尝试时收到以下消息。 “AttributeError:无法访问‘SeriesGroupBy’对象的可调用属性‘ewm’,请尝试使用‘apply’方法”
    • @Mark 尝试升级pandas
    猜你喜欢
    • 2016-04-16
    • 2018-01-08
    • 2020-01-20
    • 2020-01-19
    • 1970-01-01
    • 2021-06-25
    • 2020-08-14
    • 2013-07-20
    • 2018-12-17
    相关资源
    最近更新 更多