假设我有以下DataFrame
>>> d = {'col1': ['A', 'B', 'A', 'A', 'B'], 'col2': ['q1', 'q2', 'q1', 'q2', 'q1'],
'col3':[1, 2, 1, 4, 5]}
>>> df = pd.DataFrame(data=d)
>>> df
col1 col2 col3
0 A q1 1
1 B q2 2
2 A q1 1
3 A q2 4
4 B q1 5
现在我想按col1和col2进行分组,并在下面添加总计 所以我的结果是:
col3
col1 col2
A q1 2
A q2 4
total_A 6
B q1 5
B q2 2
total_B 7
关于如何在保持第1列和第2列分组的同时增加总价值的任何想法?最好不要手动,因为我的实际DataFrame很大
答案 0 :(得分:2)
分别计算总数并将其连接在一起:
# First step: GroupBy and sum.
u = df.groupby(['col1', 'col2']).sum()
# Second step: Compute the totals and set a MultiIndex for easy concatenation.
v = u.groupby(level=0).sum()
v.index = pd.MultiIndex.from_arrays([v.index, ['total'] * len(v)])
# Final step: Concat the intermediate results.
pd.concat([v, u]).sort_index(level=0, axis=0)
col3
col1
A q1 2
q2 4
total 6
B q1 5
q2 2
total 7
答案 1 :(得分:2)
您也可以尝试以下操作:
d = df.groupby(['col1','col2']).sum()
pd.concat([d,
d.sum(level=0).assign(col2='')
.rename(index=lambda x: x+' total')
.set_index('col2', append=True)]).sort_index()
输出:
col3
col1 col2
A q1 2
q2 4
A total 6
B q1 5
q2 2
B total 7