Скользящее среднее - 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"
Ответы
Ответ 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)