大熊猫组合汇总

时间:2018-01-19 16:03:46

标签: python pandas

如果我有这样的数据框:

import pandas as pd
df=pd.DataFrame({"A":[1,1,2],"B":["a","b","c"],"metric":[4,5,2]})
df=df.groupby(["A","B"]).sum()

得到的df是:

     metric
A B        
1 a       4
  b       5
2 c       2

当然是多指数水平A和B.

我怎么能将指标的总和“累计”到A级并将其应用到df这个级别,这样我就会得到这样的结果:

     metric   total_metric_by_A
A B        
1 a       4                   9
  b       5                   9
2 c       2                   2

我知道我可以重置索引,仅按A分组,然后以某种方式加入,但我真的不想这样做。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

groupby也接受一个级别参数,因此您可以执行以下操作:

df.groupby(level='A').transform('sum')
Out: 
     metric
A B        
1 a       9
  b       9
2 c       2

您需要将其分配回来

df['total_metric_by_A'] = df.groupby(level='A').transform('sum')

df
Out: 
     metric  total_metric_by_A
A B                           
1 a       4                  9
  b       5                  9
2 c       2                  2

答案 1 :(得分:1)

reindex没有第二个groupby

df['Total']=df.sum(level='A').reindex(df.index,level=0)
df
Out[179]: 
     metric  Total
A B               
1 a       4      9
  b       5      9
2 c       2      2