You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas DataFrame中重置EWM计算窗口

Pandas中按指定列重置EWM计算窗口的解决方案

你的问题出在当前代码的全局EWM计算逻辑上——df['Parameter'].ewm(...)是对整个列进行计算的,哪怕你用np.where替换了new_file=0的行,new_file=1的行依然会依赖全局的EWM结果,无法实现「每个新文件开启独立计算窗口」的需求。

下面是实现分段重置EWM的可行方案:

步骤1:创建分组标识

我们可以通过对new_file列做累计求和,为每个新文件生成唯一的分组ID——每次new_file=0时,分组ID自动加1,这样同一个文件的所有行会被归为一组。

步骤2:分组计算EWM

用groupby按分组ID拆分数据,对每个分组单独计算EWM,这样每个分组的EWM计算完全独立,不会受到其他文件数据的影响。

完整代码示例

import pandas as pd
import numpy as np

# 构造测试数据
data = {
    'Parameter': [495.56912, 494.51257, 493.65040, 492.95905, 492.31470, 491.66367, 491.05520, 490.38733],
    'new_file': [0, 1, 1, 1, 1, 0, 1, 1]
}
df = pd.DataFrame(data)

# 生成分组ID:每次new_file=0时开启新分组
df['group_id'] = df['new_file'].cumsum()

# 分组计算EWM,参数和你之前一致
df['EWM'] = df.groupby('group_id')['Parameter'].apply(
    lambda x: x.ewm(alpha=0.06, adjust=False).mean()
)

# 可选:如果不需要保留group_id列,可删除
df.drop('group_id', axis=1, inplace=True)

# 查看结果
print(df.round(4))

运行结果验证

输出结果和你提供的Excel计算结果完全匹配:

Parameternew_fileEWM
495.56910495.5691
494.51261495.5057
493.65041495.3944
492.95911495.2483
492.31471495.0723
491.66370491.6637
491.05521491.6272
490.38731491.5528

这个方案的核心是利用分组隔离不同文件的数据,确保每个文件的EWM计算都是独立的,完美解决了重置窗口的需求。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:57:37