首页 > 解决方案 > 如何获得按其他列分组的几列的总和?

问题描述

我想要做的是将此 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 Groupby 两列并获取计数Python Pandas 多列分组,意味着另一个 - 没有 group by object,但这不起作用。所以如果有人可以帮助我。

标签: pythonpandasgroup-by

解决方案


就像评论中提到的@Quang,您需要重置索引:

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

当您一次对多个列进行分组时,您会创建一个分层多索引,这就是您看到column_1groups index的原因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

推荐阅读