【问题标题】:sum up some rows and some columns with Groupby用 Groupby 总结一些行和一些列
【发布时间】:2019-06-26 18:45:28
【问题描述】:

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

  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 来实现,但我对此很陌生,无法理解它。任何帮助将不胜感激!

【问题讨论】:

  • 您在非唯一组上分组的事实有点违反直觉。您的数据是否没有每个组的唯一标识符?例如a,b,c,d 在这种情况下,因为有 4 个组?

标签: python pandas pandas-groupby


【解决方案1】:

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

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
....

【讨论】:

  • @double_h 批准该帖子,以便更多人可以从中受益
猜你喜欢
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
相关资源
最近更新 更多