在 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
我正在尝试使用以下 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