pandas.DataFrame.ewm 是一个用于计算 指数加权移动平均(Exponentially Weighted Moving Average, EWMA)的函数。EWMA 是一种加权平均方法,其中最近的数据点权重较大,而历史数据点的权重随着时间逐渐减小。ewm 方法可以用于平滑时间序列数据、计算加权平均、以及指数加权标准差等。本文主要介绍一下Pandas中pandas.DataFrame.ewm方法的使用。

DataFrame.ewm(self, com=None, span=None, halflife=None, alpha=None, min_periods=0, adjust=True, ignore_na=False, axis=0)

提供指数加权函数。

0.18.0版中的新功能。

参数

com :  float,可选

根据质心指定衰减, α=1/(1+com), for com≥0

span :  float,可选

根据范围指定衰减, α=2/(span+1), for span≥1

halflife :  float,可选

根据半衰期指定衰减,

 α=1−exp(log(0.5)/halflife),forhalflife>0

alpha :  float,可选

直接指定平滑系数α, 0<α≤1

0.18.0版中的新功能。

min_periods : int,默认0

窗口中具有值的最小观察数(否则结果为NA)。

adjust : bool,默认为True

除以开始阶段的衰减调整因子,

以解释相对权重的不平衡(将EWMA视为移动平均线)。

ignore_na : bool,默认为False

计算权重时忽略缺失值;指定True可重现0.15.0之前的行为。

axis : {0或'index',1或'columns'},默认0

要使用的轴。值0标识行,值1标识列。

返回值

DataFrame

为特定操作子分类的Window。

Notes

必须提供质心(mass),跨度(span),半衰期(half-life)和alpha值之一。参数的允许值和关系在上面的参数描述中指定;有关详细说明,请参见本节末尾的链接。

当adjust为True(默认)时,将使用权重(1-alpha)**(n-1),(1-alpha)**(n-2),…,1-alpha,1来计算加权平均值。
当adjust为False时,将按以下方式递归计算加权平均值:
weighted_average [0] = arg [0]; weighted_average [i] =(1-alpha)* weighted_average [i-1] + alpha * arg [i]

当ignore_na为False(默认)时,权重基于绝对位置。例如,用于计算[x,None,y]的最终加权平均值的x和y的权重分别为(1-alpha)** 2和1(如果adjust为True)和(1-alpha)** 2alpha(如果adjust为False)。
当ignore_na为True(再现0.15.0之前的行为)时,权重基于相对位置。例如,用于计算[x,None,y]的最终加权平均值的x和y的权重分别为1-alpha和1(如果adjust为True)和1-alpha和alpha(如果adjust为False)。

例子

1)计算指数加权移动平均

import pandas as pd

# 创建一个简单的 DataFrame
data = {'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)

# 计算指数加权移动平均
df['ewm_mean'] = df['value'].ewm(span=3).mean()

print(df)

2)使用 halflife 参数

import pandas as pd

# 创建一个简单的 DataFrame
data = {'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)

df['ewm_halflife'] = df['value'].ewm(halflife=2).mean()
print(df)

3)计算加权标准差

import pandas as pd

# 创建一个简单的 DataFrame
data = {'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)

df['ewm_std'] = df['value'].ewm(span=3).std()
print(df)

4)使用示例

import pandas as pd
import numpy as np

# 创建一个包含NaN值的DataFrame
df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
print("原始 DataFrame:")
print(df)

# 使用 ewm 方法计算指数加权移动平均(使用 com=0.5)
result = df.ewm(com=0.5).mean()
print("\n使用 ewm(com=0.5).mean() 后的结果:")
print(result)

推荐文档

相关文档

大家感兴趣的内容

随机列表