суммировать значения группы по объекту - PullRequest
1 голос
/ 28 апреля 2019

У меня проблема с некоторыми объектами pandas groupby, которая выглядит следующим образом:

поэтому у меня есть этот фрейм данных:

  Letter name    num_exercises
    A       carl        1 
    A       Lenna       2 
    A       Harry       3         
    A       Joe         4  
    B       Carl        5    
    B       Lenna       3   
    B       Harry       3  
    B       Joe         6 
    C       Carl        6
    C       Lenna       3 
    C       Harry       4  
    C       Joe         7  

И я хочу добавить столбец с именем num_exercises_total, который содержит общую сумму num_exercises для каждой буквы. Обратите внимание, что это значение должно повторяться для каждой строки в группе букв.

Вывод будет следующим:

Letter name    num_exercises   num_exercises_total
A       carl        1                 15
A       Lenna       2                 15
A       Harry       3                 15
A       Joe         4                 15
B       Carl        5                 18
B       Lenna       3                 18
B       Harry       3                 18
B       Joe         6                 18
C       Carl        6                 20
C       Lenna       3                 20
C       Harry       4                 20
C       Joe         7                 20

Я попытался добавить новый столбец следующим образом:

df['num_exercises_total'] = df.groupby(['letter'])['num_exercises'].sum()

Но он возвращает значение NaN для всех строк.

Любая помощь будет принята с благодарностью.

Заранее большое спасибо!

Ответы [ 2 ]

4 голосов
/ 28 апреля 2019

Вы можете проверить transform

df.groupby(['Letter'])['num_exercises'].transform('sum')
0     10
1     10
2     10
3     10
4     17
5     17
6     17
7     17
8     20
9     20
10    20
11    20
Name: num_exercises, dtype: int64

df['num_of_total']=df.groupby(['Letter'])['num_exercises'].transform('sum')
0 голосов
/ 03 июня 2019

Transform отлично работает для этого вопроса. WenYoBen верно. Я просто выкладываю здесь немного другую версию.

df['num_of_total']=df['num_excercises'].groupby(df['Letter']).transform('sum')
>>> df
   Letter   name  num_excercises  num_of_total
0       A   carl               1            10
1       A  Lenna               2            10
2       A  Harry               3            10
3       A    Joe               4            10
4       B   Carl               5            17
5       B  Lenna               3            17
6       B  Harry               3            17
7       B    Joe               6            17
8       C   Carl               6            20
9       C  Lenna               3            20
10      C  Harry               4            20
11      C    Joe               7            20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...