首页 > 解决方案 > 用 Groupby 总结一些行和一些列

问题描述

我有一个简化的大型数据集,如下所示:

  Name  c1  c2  c3  c4
0   a1   1   2   2   3
1   a2   2   1   1   2
2   a3   3   1   2   1
3   a4   2   3   3   4
4   b1   1   2   2   3
5   b2   3   1   2   1
6   b3   2   1   2   1
7   b4   1   3   4   1

我想总结一些列和一些行以创建一个如下所示的聚合数据框:

    Name  c1+c2  c3+c4
0  a1+a2      6      8
1  a3+a4      9     10
2  b1+b2      7      8
3  b3+b4      7      8

我一直在试图弄清楚如何使用 groupby 和 sum 来做到这一点,但我对此很陌生,无法理解它。任何帮助将不胜感激!

标签: pythonpandaspandas-groupby

解决方案


首先,您需要为需要组合的行提供唯一标识符,即

uq_grp Name  c1  c2  c3  c4
grp1   a1   1   2   2   3
grp1   a2   2   1   1   2
grp2   a3   3   1   2   1
grp2   a4   2   3   3   4
grp3   b1   1   2   2   3
grp3   b2   3   1   2   1

uq_grp基本上定义了现在需要合并哪些行:

df['c1+c2'] = df['c1']+df['c2']
df['c3+c4'] = df['c3']+df['c4']

uq_grp Name  c1  c2  c3  c4 c1+c2  c3+c4
grp1   a1    1   2   2   3    3     5
grp1   a2    2   1   1   2    3     3
grp2   a3    3   1   2   1    4     3
grp2   a4    2   3   3   4    5     7 
grp3   b1    1   2   2   3    3     5 
grp3   b2    3   1   2   1    4     3

现在根据 uq_grp 组合行

df.groupby(['uq_grp'],as_index=False)[['c1+c2','c3+c4']].sum()

结果

     Name  c1+c2  c3+c4
0  grp1      6      8
1  grp2      9     10
2  grp3      7      8
....

推荐阅读