在pandas df中对多个列和计数总和进行分组

时间:2016-12-15 13:34:56

标签: python pandas group-by sum aggregate

我在pandas df中有一张桌子

 master_id    pidx   pidy   flag   count
    xxx        a      b       A      10
    xxx        a      c       A      20
    xxx        a      d       A      30
    xxx        b      d       A      40
    xxx        a      c       C      50
    xxx        a      c       C      60
    xxx        x      y       C      70
    xxx        x      y       C      80

我想对多个列进行分组并对计数进行求和而不考虑标志。

 xxx  a    c   A   20
 xxx  a    c   C   50
 xxx  a    c   C   60

最终输出应为

 xxx  a   c   A  130

决赛桌应该是

 master_id   pidx   pidy   flag   count
    xxx        a      b       A      10
    xxx        a      c       A      130
    xxx        a      d       A      30
    xxx        b      d       A      40
    xxx        x      y       C      150

1 个答案:

答案 0 :(得分:2)

I think you need groupbyagg - 列flagfirst和列count汇总而成sum

df = df.groupby(['pidx','pidy']).agg({'flag':'first', 'count':'sum'}).reset_index()
print (df)
  pidx pidy  count flag
0    a    b     10    A
1    a    c    130    A
2    a    d     30    A
3    b    d     40    A
4    x    y    150    C

因为如果groupbypidxpidy使用flag,则输出不同:

df = df.groupby(['pidx','pidy','flag'], as_index=False)['count'].sum()
print (df)
  pidx pidy flag  count
0    a    b    A     10
1    a    c    A     20
2    a    c    C    110
3    a    d    A     30
4    b    d    A     40
5    x    y    C    150