pandas 如何使用数据透视表将行合计添加到简单df

xjreopfe  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(105)

我有一个简单的df:

a=pd.DataFrame({'a': [1, 2, 3], 'b': [2, 3, 4], 'c': [3, 4, 5]},index=["type1","type2","type3"])

       a  b  c
type1  1  2  3
type2  2  3  4
type3  3  4  5

尽管pivot_table适用于更复杂的数据,但我可以使用它来快速生成列总计:

>>> a.pivot_table(index=a.index,margins=True,aggfunc=sum)

       a  b  c 
type1  1  2   3
type2  2  3   4
type3  3  4   5
All    6  9  12

我可以使用这种方法轻松地添加行合计吗?
所需输出为:

a  b  c   All
type1  1  2   3   6 
type2  2  3   4   9 
type3  3  4   5  12 
All    6  9  12  27
nhn9ugyo

nhn9ugyo1#

你可以通过转置、旋转和再转置来做到这一点:

a = pd.DataFrame({'a': [1, 2, 3], 'b': [2, 3, 4], 'c': [3, 4, 5]},index=["type1","type2","type3"])
a = a.pivot_table(index=a.index,margins=True,aggfunc=sum)
a = a.T.pivot_table(index=a.columns,margins=True,aggfunc=sum,sort=False).T

输出量:

a  b   c  All
type1  1  2   3    6
type2  2  3   4    9
type3  3  4   5   12
All    6  9  12   27

为什么不使用sum

a = pd.DataFrame({'a': [1, 2, 3], 'b': [2, 3, 4], 'c': [3, 4, 5]},index=["type1","type2","type3"])
a.loc['All'] = a.sum()
a['All'] = a.sum(axis=1)

输出量:

a  b   c  All
type1  1  2   3    6
type2  2  3   4    9
type3  3  4   5   12
All    6  9  12   27

相关问题