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

对DataFrame列应用自定义函数:优化EMA指标计算代码的方法

代码优化方案:EMA递推计算场景

你原本的写法存在两个可优化点:

  1. 链式赋值df.iloc[i]['fast_ema']可能触发SettingWithCopyWarning,极端情况下会出现赋值不生效的问题
  2. 纯Python循环在处理长序列时性能极差,且代码冗余

你的计算逻辑属于标准的指数移动平均(EMA),pandas内置了高度优化的矢量化实现,完全可以替代手动循环。


最优优化方案:使用pandas内置ewm方法

优化后的完整代码如下,计算结果和你原逻辑100%对齐:

import pandas as pd

class EMA_Period:
   fast = 8
   slow = 17

times = [1578614400, 1578614700, 1578615000, 1578615300, 1578615600]
closes = [10278.6, 10276.0, 10275.6, 10274.8, 10277.0]

df = pd.DataFrame(data={'time': times, 'close': closes})
df.set_index('time', inplace=True)

# 直接调用内置方法,无需手动循环、提前初始化列
df['fast_ema'] = df['close'].ewm(span=EMA_Period.fast, adjust=False).mean()

参数说明:

  • span参数对应你自定义的EMA周期,底层自动计算平滑系数alpha=2/(周期+1),和你写的calculate_ema逻辑完全一致
  • adjust=False指定使用递推公式计算,而非加权平均公式,完全匹配你手动循环的计算规则
  • 该方案为矢量化实现,万级以上数据量下性能比手动循环快几十到上百倍

通用自定义递推场景优化方案

如果你的实际业务逻辑是非标准的自定义递推计算,无法使用pandas内置函数实现,可以选择两种优化方向:

  • 中等数据量场景:使用pandas.Series.expanding().apply搭配numba装饰器加速自定义计算逻辑
  • 超大吞吐量场景:将递推逻辑转换为numpy矩阵运算,进一步压榨性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:33:00