📜  如何计算 Pandas DataFrame 中的 MOVING AVERAGE?(1)

📅  最后修改于: 2023-12-03 15:24:54.536000             🧑  作者: Mango

如何计算 Pandas DataFrame 中的 MOVING AVERAGE?

在金融领域,经常需要对时序数据进行操作,移动平均值( Moving Average,简称 MA)是一种常用的统计方法,用于计算时序数据中的趋势。在 Pandas 中,我们可以很容易地通过 rolling() 方法来计算移动平均值。

计算简单移动平均值

简单移动平均值(Simple Moving Average,简称SMA)的计算方法是对数据的每个子序列求平均数。Pandas 中,我们可以通过 rolling() 方法和 mean() 方法来实现简单移动平均值的计算。

如下是一个简单的例子:

import pandas as pd

# 创建数据
data = {'price': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)

# 计算简单移动平均值
df['SMA'] = df['price'].rolling(window=2).mean()

print(df)

输出结果如下:

   price   SMA
0     10   NaN
1     20  15.0
2     30  25.0
3     40  35.0
4     50  45.0

其中,rolling() 方法设置了窗口大小为2,表示每个子序列的长度为2,即计算每两个相邻数据的平均值,结果存储在新的列'SMA'中。

计算加权移动平均值

加权移动平均值(Weighted Moving Average,简称WMA)也是一种常用的移动平均值方法,不同于简单移动平均值,加权移动平均值为每个数据点赋予不同的权重。在 Pandas 中,我们可以通过 rolling() 方法和 apply() 方法来实现加权移动平均值的计算。

如下是一个简单的例子:

import pandas as pd
import numpy as np

# 创建数据
data = {'price': [10, 20, 30, 40, 50], 'weight': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)

# 计算加权移动平均值
def wma(x):
    return np.average(x['price'], weights=x['weight'])

df['WMA'] = df.rolling(window=3).apply(wma)

print(df)

输出结果如下:

   price  weight        WMA
0     10       1        NaN
1     20       2        NaN
2     30       3  22.857143
3     40       4  32.727273
4     50       5  42.857143

其中,rolling() 方法设置了窗口大小为3,apply() 方法使用自定义函数 wma() 计算加权移动平均值,并将计算结果存储在新的列'WMA'中。

除此之外,在 Pandas 中还提供了指数移动平均值(Exponential Moving Average,简称EMA)等更加高级的移动平均值计算方法。你可以在 Pandas 的官方文档中查看更多信息,链接如下:

Pandas Official Documentation - Moving Window Functions