Здесь необходимо добавить еще один DataFrame после sum
с MultiIndex
, созданным MultiIndex.from_product
:
df = df_pvt.sum(axis=1, level=0)
df.columns = pd.MultiIndex.from_product([['Total'], df.columns])
df_pvt = df_pvt.join(df)
print (df_pvt)
Value1 Value2 Value3 \
Month Apr-20 June-20 May-20 Apr-20 June-20 May-20 Apr-20 June-20 May-20
ID
1 12 15 0 124 1234 0 124 1234 0
2 45 0 23 1324 0 214 1324 0 214
3 0 34 0 0 234 0 0 234 0
Value4 Total
Month Apr-20 June-20 May-20 Value1 Value2 Value3 Value4
ID
1 124 1234 0 27 1358 1358 1358
2 1324 0 214 68 1538 1538 1538
3 0 234 0 34 234 234 234
Если хотите выбрать один из новых добавленных столбцов, используйте кортеж:
print (df_pvt[('Total','Value1')])
ID
1 27
2 68
3 34
Name: (Total, Value1), dtype: int64
Другая идея - это изменение порядка новых уровней:
df = df_pvt.sum(axis=1, level=0)
df.columns = pd.MultiIndex.from_product([df.columns, ['Total'], ])
df_pvt = df_pvt.join(df)
print (df_pvt)
Value1 Value2 Value3 \
Month Apr-20 June-20 May-20 Apr-20 June-20 May-20 Apr-20 June-20 May-20
ID
1 12 15 0 124 1234 0 124 1234 0
2 45 0 23 1324 0 214 1324 0 214
3 0 34 0 0 234 0 0 234 0
Value4 Value1 Value2 Value3 Value4
Month Apr-20 June-20 May-20 Total Total Total Total
ID
1 124 1234 0 27 1358 1358 1358
2 1324 0 214 68 1538 1538 1538
3 0 234 0 34 234 234 234
#swapped order
print (df_pvt[('Value1','Total')])
Также возможно создание пустых строк уровней, но я думаю, что это сбивает с толку (потому что для выбора необходимо использовать пустая строка), поэтому предпочтите первое решение:
df = df_pvt.sum(axis=1, level=0)
df.columns = pd.MultiIndex.from_product(['Total Sum of ' + df.columns, ['']])
df_pvt = df_pvt.join(df)
print (df_pvt)
Value1 Value2 Value3 \
Month Apr-20 June-20 May-20 Apr-20 June-20 May-20 Apr-20 June-20 May-20
ID
1 12 15 0 124 1234 0 124 1234 0
2 45 0 23 1324 0 214 1324 0 214
3 0 34 0 0 234 0 0 234 0
Value4 Total Sum of Value1 Total Sum of Value2 \
Month Apr-20 June-20 May-20
ID
1 124 1234 0 27 1358
2 1324 0 214 68 1538
3 0 234 0 34 234
Total Sum of Value3 Total Sum of Value4
Month
ID
1 1358 1358
2 1538 1538
3 234 234
Для выбора необходимо также использовать пустую строку:
print (df_pvt[('Total Sum of Value1','')])
ID
1 27
2 68
3 34
Name: (Total Sum of Value1, ), dtype: int64