Я хочу рассчитать скользящее среднее для разных размеров окна для каждого тикера в моем фрейме данных. В идеале я мог бы передать список размеров окна и для каждого тикера я бы получил новые столбцы (по одному для каждого скользящего среднего размера). Поэтому, если бы я хотел получить скользящее среднее 2 и одно из 3, на каждом тикере было бы два столбца.
import datetime as dt
import numpy as np
import pandas as pd
Dt_df = pd.DataFrame({"Date":pd.date_range('2018-07-01', periods=5, freq='D')})
Tick_df = pd.DataFrame({"Ticker":['ABC',"HIJ","XYZ"]})
Mult_df = pd.merge(Tick_df.assign(key='x'), Dt_df.assign(key='x') on='key').drop('key', 1)
df2 = pd.DataFrame(np.random.randint(low=5, high=10, size=(15, 1)), columns=['Price'])
df3 = Mult_df.join(df2, how='outer')
df3.set_index(['Ticker','Date'],inplace = True)
Вот пример набора данных:
Когда я пытаюсь применить эту функцию:
def my_RollMeans(x):
w = [1,2,3]
s = pd.Series(x)
Bob = pd.DataFrame([s.rolling(w1).mean() for w1 in w]).T
return Bob
к моему фрейму данных df3 с использованием различных версий применения или преобразования я получаю ошибки.
NewDF = df3.groupby('Ticker').Price.transform(my_RollMeans).fillna(0)
Последняя ошибка:
Данные должны быть одномерными