python - 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 |
解决方案
我们可以创建一个布尔掩码来检查新文件的开始,然后计算此掩码上的累积和以识别属于同一文件的行块,然后这些块上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
推荐阅读
- c++ - 为什么缓冲区在 System Write API 调用上跳过打印?
- c - Overwrite EIP in the main function
- ios - Swift 从 UITabBarController 中删除导航栏的空间
- node.js - 如何让 ts-node REPL 了解参考路径,尤其是 globals.d.ts
- ruby-on-rails - 为什么模块 ClassMethod 在这里不提供类方法
- javascript - 从javascript中的一串html元素中提取URL
- php - Instagram 基本显示 API 返回错误
- r - 预测值之和
- c# - Purchases.Voidedpurchases.List 返回空响应
- r - 如何在 gt 中的多列上使用相同的渐变?