У меня есть фреймворк данных, который я бы хотел рассчитать всплывающее значение над одним столбцом (quiz_score), но вам нужно сгруппировать по два разных столбца (userid и week). Данные выглядит следующим образом:Расширение среднего сгруппировано по нескольким столбцам в pandas
data = {"userid": ['1','1','1','1','1','1','1','1', '2','2','2','2','2','2','2','2'],\
"week": [1,1,2,2,3,3,4,4, 1,2,2,3,3,4,4,5],\
"quiz_score": [12, 14, 14, 15, 9, 15, 11, 14, 15, 14, 15, 13, 15, 10, 14, 14]}
>>> df = pd.DataFrame(data, columns = ['userid', 'week', 'quiz_score'])
>>> df
userid week quiz_score
0 1 1 12
1 1 1 14
2 1 2 14
3 1 2 15
4 1 3 9
5 1 3 15
6 1 4 11
7 1 4 14
8 2 1 15
9 2 2 14
10 2 2 15
11 2 3 13
12 2 3 15
13 2 4 10
14 2 4 14
15 2 5 14
Мне нужно рассчитать расширение средств по идентификатору пользователя в течение каждой недели - то есть, для каждого пользователя каждую неделю, мне нужно их средний балл викторины за предыдущие недели. Я знаю, что решение будет включать в себя использование shift() и pd.expanding_mean() или .expanding(). Mean() в той или иной форме, но я не смог правильно выполнить группировку и смену - даже когда я попробуйте без сдвига, результаты не сгруппированы должным образом и, по-видимому, просто расширяют среднее значение по строкам, как если бы не было никакой группировки:
df.groupby (['userid', 'week']). (pd.expanding_mean) .reset_index()
Чтобы было ясно, правильный результат будет выглядеть следующим образом:
userid week expanding_mean_quiz_score
0 1 1 NA
1 1 2 13
2 1 3 13.75
3 1 4 13.166666
4 1 5 13
5 1 6 13
6 2 1 NA
7 2 2 15
8 2 3 14.666666
9 2 4 14.4
10 2 5 13.714
11 2 6 13.75
Обратите внимание, что expanding_mean_quiz_score для каждого пользователя/неделя среднее значение SCO res для этого пользователя во все предыдущие недели.
Спасибо за вашу помощь, я никогда не использовал expand_mean(), и здесь я здесь.