question:- get the total of all one two columns
bar baz foo
one two one two one two
name
A 0.895717 0.805244 1.206412 2.565646 1.431256 1.431256
B 0.410835 0.813850 0.132003 0.827317 0.076467 0.076467
C 1.413681 1.607920 1.024180 0.569605 0.875906 0.875906
output:-
bar baz foo
one two one two one two
name total of one total of two
A 0.895717 0.805244 1.206412 2.565646 1.431256 1.431256 sum of one sum of two
B 0.410835 0.813850 0.132003 0.827317 0.076467 0.076467 sum of one sum of two
C 1.413681 1.607920 1.024180 0.569605 0.875906 0.875906 sum of one sum of two
Total sum sum sum sum sum sum
You can aggregate per secon dlevel of MultiIndex in columns and then add first level all
for MultiIndex
, so possible use left join by DataFrame.join
:
df1 = pd.concat({'all': df.groupby(level=1, axis=1).sum().add_prefix('total_')}, axis=1)
df = df.join(df1)
print (df)
bar baz foo all \
one two one two one two total_one
A 0.895717 0.805244 1.206412 2.565646 1.431256 1.431256 3.533385
B 0.410835 0.813850 0.132003 0.827317 0.076467 0.076467 0.619305
C 1.413681 1.607920 1.024180 0.569605 0.875906 0.875906 3.313767
total_two
A 4.802146
B 1.717634
C 3.053431