Временные ряды: сгруппировать и рассчитать дисперсию - PullRequest
1 голос
/ 20 апреля 2020

У меня есть следующий фрейм данных с данными временных рядов:

df = pd.DataFrame(columns = ['id', 'value'])
df['value'] =[9, 16, 10, 12, 11, 14]
df['id'] = [1, 1, 1, 2, 2, 2]

Для каждого временного ряда (определяется столбцом 'id') я хочу вычислить дисперсию, чтобы найти временные ряды, которые не меняются вообще или очень мало .

Конечный фрейм данных должен выглядеть следующим образом:

df_end = pd.DataFrame(columns = ['id','value', 'var'])
df_end['value'] =[9, 16, 10, 12, 11, 14]
df_end['id'] = [1, 1, 1, 2, 2, 2]
df_end['var'] = [21, 21, 21, 2.3, 2.3, 2.3]

Я пытался:

df.groupby(df['id']).var()

, который дает мне значения, но я не мог поместить его в df в правильной форме. Я уверен, что для этого есть удобная функция, о которой я пока не знаю!

Спасибо за помощь!

1 Ответ

1 голос
/ 20 апреля 2020

Использовать GroupBy.transform с указанным столбцом value:

df['var'] = df.groupby('id')['value'].transform('var')
print (df)
   id  value        var
0   1      9  14.333333
1   1     16  14.333333
2   1     10  14.333333
3   2     12   2.333333
4   2     11   2.333333
5   2     14   2.333333
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...