如果我有这样的数据框:
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分组,然后以某种方式加入,但我真的不想这样做。还有更好的方法吗?
答案 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