Панды - расширяющиеся средства с групповым - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь найти расширяющееся средство. Я могу заставить его работать, когда я повторяю и «группирую», просто фильтруя по определенным значениям, но это занимает слишком много времени. Я чувствую, что это должно быть простое приложение для групповой работы, но когда я делаю это, оно просто расширяет среднее значение для всего набора данных, а не просто делает это для каждой из групп в grouby.

для быстрого примера:

Я хочу взять это (в данном конкретном случае, сгруппированные по «игроку» и «году») и получить среднее значение.

player  pos year    wk  pa  ra
a       qb  2001    1   10  0       
a       qb  2001    2   5   0
a       qb  2001    3   10  0
a       qb  2002    1   12  0
a       qb  2002    2   13  0
b       rb  2001    1   0   20
b       rb  2001    2   0   17
b       rb  2001    3   0   12
b       rb  2002    1   0   14
b       rb  2002    2   0   15

чтобы получить:

player  pos year    wk  pa  ra  avg_pa  avg_ra
a       qb  2001    1   10  0   10      0
a       qb  2001    2   5   0   7.5     0
a       qb  2001    3   10  0   8.3     0
a       qb  2002    1   12  0   12      0
a       qb  2002    2   13  0   12.5    0
b       rb  2001    1   0   20  0       20
b       rb  2001    2   0   17  0       18.5
b       rb  2001    3   0   12  0       16.3
b       rb  2002    1   0   14  0       14
b       rb  2002    2   0   15  0       14.5

Не уверен, где я иду не так:

# Group by player and season - also put weeks in correct ascending order
grouped = calc_averages.groupby(['player','pos','seas']).apply(pd.DataFrame.sort_values, 'wk')


grouped['avg_pa'] = grouped['pa'].expanding().mean()

Но это даст расширенное среднее значение для всего набора, а не для каждого игрока, сезона.

1 Ответ

0 голосов
/ 16 сентября 2018

Попробуйте:

df.sort_values('wk').groupby(['player','pos','year'])['pa','ra'].expanding().mean()\
  .reset_index()

Вывод:

  player pos  year  level_3         pa         ra
0      a  qb  2001        0  10.000000   0.000000
1      a  qb  2001        1   7.500000   0.000000
2      a  qb  2001        2   8.333333   0.000000
3      a  qb  2002        3  12.000000   0.000000
4      a  qb  2002        4  12.500000   0.000000
5      b  rb  2001        5   0.000000  20.000000
6      b  rb  2001        6   0.000000  18.500000
7      b  rb  2001        7   0.000000  16.333333
8      b  rb  2002        8   0.000000  14.000000
9      b  rb  2002        9   0.000000  14.500000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...