Python 在数据帧上使用groupedby函数时添加总计

Python 在数据帧上使用groupedby函数时添加总计,python,pandas,dataframe,Python,Pandas,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

假设我有以下数据帧

>>> 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列分组的同时添加此总值,您有什么想法吗?最好不要手动,因为我的实际数据帧要大一点

单独计算总数并将它们连接在一起:

# 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

分别计算总计并将其连接在一起:

# 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
您也可以尝试以下方法:

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
您也可以尝试以下方法:

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