2016-12-15 44 views
1

计数总和我有一个表中的大熊猫DF分组多个列,并且在大熊猫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 

回答

2

我认为你需要groupbyagg - 列flag是聚集通过first和列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 

,因为如果使用groupbypidxpidyflag,输出不同的是:

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 
+0

你的代码的工作,但说我有一个多列说master_id,那么我就可以” t在'df.groupby(['master_id','pidx','pidy'])中添加该列''看到我用另一列编辑了我的df。 – Shubham

+0

我把叶ID放在agg函数中,它似乎工作,'df = df.groupby(['pidx','pidy'])。agg({'leafId':'first','flag':'first', 'count':'sum'})。reset_index()'但它是正确的方式吗? – Shubham

+0

这取决于你需要什么。如果需要按列pydx和pidy分组,并获得第一列的leafId和标志,并且对列计数中的所有行进行求和,那么您是正确的。 – jezrael