Подтвердить что ты не робот

Скользящее среднее - Pandas

Я хотел бы добавить вычисление скользящей средней к моим временным рядам обмена.

Исходные данные из 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

Вычисление 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

Я хотел бы добавить вычисленное Moving Average в качестве нового столбца справа после "Значение", используя тот же индекс (Date). Предпочтительно, я хотел бы также переименовать вычисленную скользящую среднюю в "MA"

4b9b3361

Ответ 1

Скользящее среднее возвращает a Series, вам нужно добавить его только в качестве нового столбца вашего DataFrame (MA), как описано ниже.

Для информации функция rolling_mean устарела в pandas более новых версиях. Я использовал новый метод в моем примере, см. Ниже цитату из pandas документация

Предупреждение До версии 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

Если вы вычисляете более одного скользящего среднего:

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)