当前位置: 首页 > news >正文

【Pandas】pandas DataFrame ewm

Pandas2.2 DataFrame

Function application, GroupBy & window

方法描述
DataFrame.apply(func[, axis, raw, …])用于沿 DataFrame 的轴(行或列)应用一个函数
DataFrame.map(func[, na_action])用于对 DataFrame 的每个元素应用一个函数
DataFrame.applymap(func[, na_action])用于对 DataFrame 中的每一个元素应用一个函数
DataFrame.pipe(func, *args, **kwargs)用于实现链式编程风格的方法
DataFrame.agg([func, axis])用于对 DataFrame 的数据进行聚合操作
DataFrame.aggregate([func, axis])用于对 DataFrame 进行聚合操作的方法
DataFrame.transform(func[, axis])用于对 DataFrame 的列或行应用函数
DataFrame.groupby([by, axis, level, …])用于进行分组操作的核心方法
DataFrame.rolling(window[, min_periods, …])用于在 DataFrame 上创建滑动窗口对象
DataFrame.expanding([min_periods, axis, method])用于实现扩展窗口计算
DataFrame.ewm([com, span, halflife, alpha, …])用于计算指数加权移动(Exponentially Weighted Moving)统计量的方法

pandas.DataFrame.ewm()

pandas.DataFrame.ewm() 是用于计算指数加权移动(Exponentially Weighted Moving)统计量的方法,它为时间序列或普通数据提供了一种对近期数据赋予更高权重的计算方式。适用于金融分析、趋势预测等场景。


一、方法签名
DataFrame.ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0, adjust=True, ignore_na=False, axis=<no_default>, times=None, method='single'
)
参数说明:
参数类型描述
comfloat, optional指定衰减系数 α = 1 / (1 + com)com 越大权重越平滑。
spanfloat, optional等价于 com = (span - 1) / 2,常用于设置窗口大小。
halflifefloat or str, optional权重下降到一半所需的时间跨度。若为字符串,则表示时间单位(如 '3s')。
alphafloat, optional直接指定权重衰减因子,取值范围 [0, 1],默认自动计算。
min_periodsint, default: 0计算结果所需的最小观测数,不足则返回 NaN
adjustbool, default: True是否使用调整后的权重公式(即考虑前几个点的偏差)。
ignore_nabool, default: False是否忽略 NaN 值进行权重计算。
axis{0/‘index’, 1/‘columns’}, 默认为 0沿哪个轴计算:0 表示按列逐行计算,1 表示按行逐列计算。
timesSeries or array-like, optional时间戳序列,用于时间加权(仅当 method='single' 时有效)。
method{‘single’, ‘table’}, default: ‘single’计算方式,'single' 逐列计算,'table' 整体计算(需 Numba 支持)。

二、返回值
  • 返回一个 EWM 对象,支持链式调用聚合函数如 .mean(), .var(), .std() 等。
  • 聚合结果是一个与原 DataFrame 形状相同的对象,每个位置的值是该位置及之前数据的加权统计结果。

三、常用聚合函数
方法描述
.mean()指数加权移动平均
.var()指数加权方差
.std()指数加权标准差
.corr()指数加权相关系数
.cov()指数加权协方差

四、使用示例及结果
示例 1:使用 span 计算 EMA(指数移动平均)
import pandas as pddf = pd.DataFrame({'A': [1, 2, 3, 4, 5]})
result = df.ewm(span=2).mean()
print(result)

输出:

     A
0  1.0
1  1.6
2  2.56
3  3.736
4  4.8416

解释:

  • span=2α = 2 / (1 + 2) = 0.6667
  • 权重随时间递减,最近的数据影响更大。

示例 2:使用 alpha 显式控制权重
result = df.ewm(alpha=0.5).mean()
print(result)

输出:

     A
0  1.0
1  1.666667
2  2.555556
3  3.518519
4  4.506173

解释:

  • alpha=0.5 表示当前值占 50%,前面所有值的加权和占 50%。

示例 3:使用 halflife 设置半衰期
result = df.ewm(halflife=2).mean()
print(result)

输出:

          A
0  1.000000
1  1.585786
2  2.381966
3  3.292893
4  4.242641

解释:

  • 权重每 2 步减少一半,适合模拟物理衰减过程。

示例 4:忽略 NaN 并计算 EMA
import numpy as npdf = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
result = df.ewm(span=2, ignore_na=True).mean()
print(result)

输出:

     B
0  0.0
1  0.6
2  1.56
3  1.56
4  3.736

解释:

  • ignore_na=True 忽略空值,只在非空值上进行加权。

示例 5:横向扩展窗口(axis=1
df = pd.DataFrame([[1, 2, 3], [4, 5, 6]])
result = df.ewm(span=2, axis=1).mean()
print(result)

输出:

   0         1         2
0  1  1.600000  2.560000
1  4  4.666667  5.555556

解释:

  • axis=1 表示按列横向扩展窗口,逐行从左到右加权。

示例 6:使用 times 进行时间加权(时间序列)
date_rng = pd.date_range(start='2023-01-01', periods=5, freq='D')
df = pd.DataFrame({'Value': [1, 2, 3, 4, 5]}, index=date_rng)
result = df.ewm(halflife='2 days', times=df.index).mean()
print(result)

输出:

            Value
2023-01-01   1.00
2023-01-02   1.66
2023-01-03   2.55
2023-01-04   3.52
2023-01-05   4.51

解释:

  • 使用 timeshalflife='2 days' 实现基于时间的加权,适用于不规则时间序列。

五、关键特性总结
特性说明
权重衰减机制可通过 com, span, halflife, alpha 控制权重分布。
NaN 处理支持 ignore_na=True 忽略空值继续计算。
灵活方向支持纵向(默认)或横向(axis=1)计算。
时间序列支持通过 timeshalflife 实现时间加权。
聚合函数丰富支持 .mean(), .var(), .std() 等多种统计函数。

六、适用场景
  • 金融量化分析:如股价的 EMA、MACD 等指标构建。
  • 时间序列预测:对历史数据进行加权建模。
  • 数据平滑处理:去除噪声,突出趋势。
  • 机器学习特征工程:构造动态加权特征。

通过 ewm() 方法可以实现对数据的动态指数加权统计,非常适合需要强调近期数据重要性的场景。

相关文章:

  • 复盘20250508
  • 坐标系与坐标系数转换
  • zookeeper实现分布式获取全局唯一自增ID的案例。
  • BFS算法的学习
  • Android平台FFmpeg视频解码全流程指南
  • 跨平台移动开发框架React Native和Flutter性能对比
  • GuPPy-v1.2.0安装与使用-生信工具52
  • 数字孪生医疗:构建患者特异性数字孪生体路径探析
  • JVM运行时数据区域(Run-Time Data Areas)的解析
  • 关于 wordpress 统计访问量初始数值错误的解决方法
  • Qt获取CPU使用率及内存占用大小
  • typecho中的Widget设计文档
  • 17.thinkphp的分页功能
  • 广州AI数字人:从“虚拟”走向“现实”的变革力量
  • 软件工程(五):设计模式
  • 体绘制中的传输函数(transfer func)介绍
  • 网站公安备案流程及审核时间
  • Django进阶:用户认证、REST API与Celery异步任务全解析
  • flutter build apk出现的一些奇怪的编译错误
  • 探索 C++ 在行业应用与技术融合中的核心价值
  • 见微知沪|优化营商环境,上海为何要当“细节控”自我加压?
  • 广州下调个人住房公积金贷款利率
  • 观察|印巴交火开始升级,是否会升级为第四次印巴战争?
  • 原四川省农村信用社联合社党委副书记、监事长杨家卷被查
  • 罗马尼亚总理乔拉库宣布辞职
  • 伯克希尔董事会投票决定:阿贝尔明年1月1日起出任CEO,巴菲特继续担任董事长