Расчет скользящего среднего по 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"

0 ответов

Другие вопросы по тегам