如何在pandas DataFrame中应用递归数字滤波器处理多时间序列
实现方案
你需要的是一阶指数平滑滤波效果,直接用pandas内置的ewm方法即可实现,矢量化计算效率高,完美适配多列批量处理需求。
完整代码示例
import pandas as pd # 样例数据构造 days1 = pd.date_range('2020-01-01 01:00:00','2020-01-01 01:19:00',freq='60s') DF = pd.DataFrame({ 'Time': days1, 'TimeSeries1': [10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20], 'TimeSeries2': [11, 12, 13, 12, 11, 14, 15, 16, 21, 20, 20, 23, 15, 15, 15, 15, 15, 15, 15, 15] }) # 自定义配置:按顺序填写要处理的时序列,以及对应位置的滤波系数A ts_cols = ["TimeSeries1", "TimeSeries2"] A_list = [0.5, 0.8] # 批量生成滤波后的列 for col, A in zip(ts_cols, A_list): DF[f"{col}_Filtered"] = DF[col].ewm(alpha=A, adjust=False).mean() # 查看结果 print(DF.head(10))
代码说明
- 只需修改
ts_cols和A_list的内容,按顺序填入你要处理的时序列名、对应滤波系数A即可,支持上百列批量处理 ewm方法的alpha参数对应公式中的系数A,adjust=False参数严格匹配你给出的递归计算逻辑,计算结果和示例完全一致- 新生成的滤波列会自动添加
_Filtered后缀,无需手动定义列名
内容的提问来源于stack exchange,提问作者User365Go
相关产品推荐
相关产品推荐

