Расчет скользящего среднего по ID
У меня есть датафрейм, df:
ID DATE ACTUALVALUE B60 C60
1 10-05-2018 5 2 4
1 10-07-2018 8 3 2
1 10-14-2018 3 6 7
1 10-19-2018 6 5 3
1 10-22-2018 4 1 1
1 10-29-2018 5 5 5
2 10-06-2018 3 2 4
2 10-08-2018 8 3 5
Я хотел бы создать новую колонку PreviousDate
по ID. Я также хотел бы создать скользящую среднюю по ID на B60 и C60. Следовательно, df должен выглядеть так:
ID DATE ACTUALVALUE B60 C60 PREVIOUSDATE MA B60 MA C60
1 10-05-2018 5 2 4 NA NA NA
1 10-07-2018 8 3 2 10-05-2018 NA NA
1 10-14-2018 3 6 7 10-07-2018 NA NA
1 10-19-2018 6 5 3 10-14-2018 NA NA
1 10-22-2018 4 1 1 10-19-2018 3.4 3.4
1 10-29-2018 5 5 5 10-22-2018 4 3.6
2 10-06-2018 3 2 4 NA NA NA
2 10-08-2018 8 3 5 10-06-2018 NA NA
Я попробую:
df["PreviousDate"]=df.groupby("ID").DATE.shift(1)
Allid=df.unique()
for i in Allid:
df['MA B60'] = df['B60'].rolling(window=5,center=False).mean()
df['MA C60'] = df['C60'].rolling(window=5,center=False).mean()
Однако скользящее среднее продолжается для следующего идентификатора, поэтому существует только первый идентификатор, который получает 4 NA. Затем вычисление скользящего среднего продолжается независимо от изменения идентификатора.
Если я попробую:
for i in Allid:
if i == df["id"]:
df['MA B60'] = df['B60'].rolling(window=5,center=False).mean()
df['MA C60'] = df['C60'].rolling(window=5,center=False).mean()
Но я получил это сообщение:
"ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()."
А также попробуйте:
df['MA B60'] = df.groupby("Id").B60.rolling(window=5,center=False).mean()
Но результат был:
"TypeError: incompatible index of inserted column with frame index"