移动平均熊猫
- 2025-03-04 08:24:00
- admin 原创
- 72
问题描述:
我想在我的交易时间序列中添加移动平均计算。
原始数据来自Quandl
Exchange = Quandl.get("BUNDESBANK/BBEX3_D_SEK_USD_CA_AC_000",
authtoken="xxxxxxx")
# Value
# Date
# 1989-01-02 6.10500
# 1989-01-03 6.07500
# 1989-01-04 6.10750
# 1989-01-05 6.15250
# 1989-01-09 6.25500
# 1989-01-10 6.24250
# 1989-01-11 6.26250
# 1989-01-12 6.23250
# 1989-01-13 6.27750
# 1989-01-16 6.31250
# Calculating Moving Avarage
MovingAverage = pd.rolling_mean(Exchange,5)
# Value
# Date
# 1989-01-02 NaN
# 1989-01-03 NaN
# 1989-01-04 NaN
# 1989-01-05 NaN
# 1989-01-09 6.13900
# 1989-01-10 6.16650
# 1989-01-11 6.20400
# 1989-01-12 6.22900
# 1989-01-13 6.25400
# 1989-01-16 6.26550
Value
我想在使用相同索引 ( )后将计算出的移动平均线作为新列添加到右侧Date
。最好我还想将计算出的移动平均线重命名为MA
。
解决方案 1:
滚动平均值返回您只需将其添加为( )Series
的新列,如下所述。DataFrame
`MA`
供您参考,该函数在 Pandas 较新版本中已被弃用。我在示例中使用了新方法,请参阅下面来自 Pandas文档rolling_mean
的引文。
警告在 0.18.0 版本之前,、、
pd.rolling_*
和pd.expanding_*
是pd.ewm*
模块级函数,现已弃用。这些函数通过使用Rolling
、Expanding
和EWM.
对象以及相应的方法调用来替换。
df['MA'] = df.rolling(window=5).mean()
print(df)
# Value MA
# Date
# 1989-01-02 6.11 NaN
# 1989-01-03 6.08 NaN
# 1989-01-04 6.11 NaN
# 1989-01-05 6.15 NaN
# 1989-01-09 6.25 6.14
# 1989-01-10 6.24 6.17
# 1989-01-11 6.26 6.20
# 1989-01-12 6.23 6.23
# 1989-01-13 6.28 6.25
# 1989-01-16 6.31 6.27
解决方案 2:
还可以使用以下代码直接在折线图中计算和可视化移动平均线:
使用股票价格数据的示例:
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import datetime
plt.style.use('ggplot')
# Input variables
start = datetime.datetime(2016, 1, 01)
end = datetime.datetime(2018, 3, 29)
stock = 'WFC'
# Extrating data
df = web.DataReader(stock,'morningstar', start, end)
df = df['Close']
print df
plt.plot(df['WFC'],label= 'Close')
plt.plot(df['WFC'].rolling(9).mean(),label= 'MA 9 days')
plt.plot(df['WFC'].rolling(21).mean(),label= 'MA 21 days')
plt.legend(loc='best')
plt.title('Wells Fargo
Close and Moving Averages')
plt.show()
有关如何执行此操作的教程:https://youtu.be/XWAPpyF62Vg
解决方案 3:
如果您要计算多个移动平均线:
for i in range(2,10):
df['MA{}'.format(i)] = df.rolling(window=i).mean()
然后你可以对所有 MA 进行汇总平均
df[[f for f in list(df) if "MA" in f]].mean(axis=1)
解决方案 4:
为了获得 Pandas 中的移动平均值,我们可以使用 cum_sum,然后除以计数。
以下是实际示例:
import pandas as pd
import numpy as np
df = pd.DataFrame({'id': range(5),
'value': range(100,600,100)})
# some other similar statistics
df['cum_sum'] = df['value'].cumsum()
df['count'] = range(1,len(df['value'])+1)
df['mov_avg'] = df['cum_sum'] / df['count']
# other statistics
df['rolling_mean2'] = df['value'].rolling(window=2).mean()
print(df)
输出
id value cum_sum count mov_avg rolling_mean2
0 0 100 100 1 100.0 NaN
1 1 200 300 2 150.0 150.0
2 2 300 600 3 200.0 250.0
3 3 400 1000 4 250.0 350.0
4 4 500 1500 5 300.0 450.0
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD