pandas的rolling对象无mad属性?如何规范实现滚动平均绝对偏差计算
pandas滚动窗口计算平均绝对偏差(MAD)的规范解决方案
方法1:复用pandas原生MAD逻辑实现
直接通过rolling.apply()调用Series自带的mad()方法即可,完全对齐原生计算逻辑,不需要手动重写统计规则:
import pandas as pd # 示例数据序列 foo = pd.Series(range(30)) # 计算窗口大小为10的滚动平均绝对偏差 rolling_mad = foo.rolling(window=10).apply(lambda x: x.mad())
方法2:手动实现计算逻辑优化性能
处理大体积数据时,可以直接把MAD的计算逻辑写在apply的匿名函数里,减少函数调用开销,计算结果和原生mad()完全一致:
rolling_mad = foo.rolling(10).apply(lambda x: (x - x.mean()).abs().mean())
补充说明:pandas的
Rolling对象没有内置mad方法,是因为该统计量的通用度低于均值、标准差等高频指标,官方没有纳入内置方法集,使用apply扩展自定义统计量就是pandas官方提供的标准解决方案,符合框架的设计逻辑。
内容的提问来源于stack exchange,提问作者Igor Rivin
相关产品推荐
相关产品推荐

