Как я могу сгруппировать сумму и счет в Python, создав новый фрейм данных? - PullRequest
0 голосов
/ 30 апреля 2020

Итак, я пытаюсь сделать что-то похожее на это:

select a, b, c, sum(d), sum(e), count(*)
from df 
group by 1,2,3

Другими словами, у меня есть это:

a        b        c    d    e
Billy    Profesor 1    10   5
Billy    Profesor 1    17   3
Andrew   Student  8    2    7

И я хочу, чтобы вывод был:

a        b        c    d    e    count
Billy    Profesor 1    27   8    2
Andrew   Student  8    2    7    1

Я попробовал это, и это частично сработало:

df.groupby(['a','b','c']).sum().reset_index()

Я все еще не мог заставить его работать на счет. Я также попробовал ответ в посте Группировать фрейм данных и получить сумму И считать? , но использование функции agg делает вещи очень грязными, и он считает каждый столбец.

ОБНОВЛЕНИЕ: Я изменил столбец c потому что у меня есть числовой c столбец для группировки, но не сумма.

Ответы [ 2 ]

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

Вы можете сделать соединение:

groups=df.groupby(['a','b','c'])
groups.sum().join(groups.size().to_frame('count')).reset_index()

Вывод:

        a         b   c   d  e  count
0  Andrew   Student  CA   2  7      1
1   Billy  Profesor  NY  27  8      2
0 голосов
/ 30 апреля 2020

Попробуйте NamedAgg

df_final = df.groupby(['a','b','c'], sort=False).agg(d=('d', 'sum'), 
                                                     e=('e', 'sum'), 
                                                     count=('e', 'count')).reset_index()

Out[12]:
        a         b   c   d  e  count
0   Billy  Profesor  NY  27  8      2
1  Andrew   Student  CA   2  7      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...