移动平均线 - 熊猫

时间:2016-10-15 15:25:31

标签: python python-3.x pandas moving-average

我想在我的交换时间序列中添加移动平均线计算。

Quandl的原始数据

Exchange = Quandl.get(" BUNDESBANK / BBEX3_D_SEK_USD_CA_AC_000",authtoken =" xxxxxxx")

Maximize x11+x12+x13+x14+x21+x23+x24

ST:
Supply:
x_11+x_12+x_13+x_14 <= 50
X_21+x_22+x_23+x_24 <= 100

Demand
25 * Y_1 + 10 * Y_2 -X_12 - X_21 = 0
30 * Y_2 + 20 * Y_3 -X_22 - X_22 = 0 
etc for for column constraint

ST: 
X_ij>=0
Y_1+Y_2 =1
Y_2+Y_3 =1 (etc)

计算移动平均值

MovingAverage = pd.rolling_mean(Exchange,5)

    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

我想在“价值”之后将计算出的移动平均线添加为右侧的新列。使用相同的索引(日期)。最好我还想将计算出的移动平均值重命名为“MA&#39;

4 个答案:

答案 0 :(得分:40)

滚动平均值返回Series,您只需将其添加为DataFrameMA)的新列,如下所述。

有关信息,pandas较新版本中已弃用rolling_mean函数。我在我的示例中使用了新方法,请参阅以下pandas documentation

中的引用
  

警告在版本0.18.0之前,pd.rolling_*pd.expanding_*pd.ewm*是模块级功能,现已弃用。使用RollingExpandingEWM.对象以及相应的方法调用替换它们。

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

答案 1 :(得分:5)

如果您计算的是多个移动平均线:

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)

答案 2 :(得分:4)

要获取熊猫的移动平均值,我们可以使用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

答案 3 :(得分:3)

还可以使用以下代码直接在折线图中计算和显示移动平均线:

使用股票价格数据的示例:

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\nClose and Moving Averages')
plt.show()

如何执行此操作的教程:https://youtu.be/XWAPpyF62Vg