Как я могу получить сумму нескольких столбцов, группирующихся по другим столбцам? - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь скопировать этот SQL код в Python:

select column_1, column_2, column_3, 
       sum(column_4) as sum_column_4, sum(column_5) as sum_column_5
from df 
group by 1,2,3;

Другими словами, мне нужно создать этот фрейм данных:

column_1   column_2   colunn_3   column_4   column_5
AA         BB         CC         5          3
AA         BB         CC         5          0
AA         BB         CC         7          3
AA         DD         EE         5          2
AA         DD         EE         7          1
DD         EE         FF         2          8
DD         EE         FF         1          0

Похоже на это:

column_1   column_2   colunn_3   sum_column_4   sum_column_5
AA         BB         CC         17             6
AA         DD         EE         12             3
DD         EE         FF         3              8

Кроме того, я пытаюсь сделать это как можно более простым, потому что на самом деле у меня много столбцов. И мне нужно иметь новый Pandas фрейм данных в качестве вывода. Итак, вот что я попробовал:

df.groupby(list(df.columns)[0:3]).sum()

Это почти там, проблема в том, что вывод становится странным, что-то вроде:

column_1   column_2   colunn_3   sum_column_4   sum_column_5
AA         BB         CC         17             6
           DD         EE         12             3
DD         EE         FF         3              8

Я пробую разные вещи, которые Я видел в других сообщениях, таких как Pandas DataFrame Группировать по двум столбцам и получить счетчики и Python Pandas сгруппировать по нескольким столбцам, что означает другое - нет группы по объекту но это не сработало. Так что, если кто-нибудь может мне помочь.

1 Ответ

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

Как и @Quang, упомянутый в комментариях, вам нужно сбросить индексирование:

df.groupby(list(df.columns)[0:3]).sum().reset_index()

Когда вы группируете несколько столбцов одновременно, вы создаете иерархическую мультииндексацию, и поэтому вы видите column_1 группы индекс AA.

вывод:

  column_1 column_2 colunn_3  column_4  column_5
0       AA       BB       CC        17         6
1       AA       DD       EE        12         3
2       DD       EE       FF         3         8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...