2016-12-15 43 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