在 Pandas 数据框中为 EWM 重置 Window

Reset Window for EWM in Pandas Dataframe

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

参数 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

我想要的是 window 每次“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 行不是新 window 的开始时应有的内容。它应该产生以下值(我从 excel 获得):

参数 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

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

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