首页 > 解决方案 > Pandas Dataframe 中 EWM 的重置窗口

问题描述

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

范围 新文件 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 中获得):

范围 新文件 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

标签: pythonpandaswindowexponential

解决方案


我们可以创建一个布尔掩码来检查新文件的开始,然后计算此掩码上的累积和以识别属于同一文件的行块,然后这些块上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

推荐阅读