当前位置: 首页 > 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() 方法可以实现对数据的动态指数加权统计,非常适合需要强调近期数据重要性的场景。

http://www.xdnf.cn/news/338311.html

相关文章:

  • 2024年 AI大模型我该买一张什么显卡?
  • 好消息!PyCharm 社区版现已支持直接选择 WSL 终端为默认终端
  • 最新Spring Security实战教程(十四)OAuth2.0精讲 - 四种授权模式与资源服务器搭建
  • 【hadoop】Sqoop数据迁移工具的安装部署
  • 22、近端策略优化算法(PPO)论文笔记
  • 深入理解Spring缓存注解:@Cacheable与@CacheEvict
  • 避免数据丢失:在存储测试数据之前,要做好Redis持久化
  • SyntaxError: Non-UTF-8 code starting with ‘\xe5‘ in file
  • 仓储车间安全革命:AI叉车防撞装置系统如何化解操作风险
  • 晶振:智能设备的“心跳”如何支撑5G与航天
  • Spring Boot 启动原理的核心机制
  • STM32-模电
  • 关于汇编语言与程序设计——单总线温度采集与显示的应用
  • React 笔记[1] hello world
  • 【程序员AI入门:应用开发】8.LangChain的核心抽象
  • 基于springboot+vue的校园部门资料管理系统
  • 2025最新免费视频号下载工具!支持Win/Mac,一键解析原画质+封面
  • 小刚说C语言刷题—1341银行存款问题
  • 到达最后一个房间的最少时间II 类似棋盘转移规律查找
  • python打卡day19
  • 爱普生FC2012SN晶振在TWS蓝牙耳机中的应用优势
  • 代理服务器
  • 《Zabbix Proxy分布式监控实战:从安装到配置全解析》
  • uniapp|获取当前用户定位、与系统设定位置计算相隔米数、实现打卡签到(可自定义设定位置、位置有效范围米数)
  • 【本地搭建npm私服】使用Verdaccio
  • K8s中的containerPort与port、targetPort、nodePort的关系:
  • ping_test_parallel.sh 并行网络扫描脚本
  • 《零基础学机器学习》学习大纲
  • ruoyi-flowable-plus 前端框架启动报错修复
  • openwrt之UCI 增删改查(add/get/set /add_list...)