Вы можете назначить среднюю строку, используя .loc
.Значения MultiIndex
являются кортежами, поэтому присваивайте соответственно:
df.loc[('Mean', ''), :] = df.mean()
Вывод:
A B C D E F
Algo T
X 1 0.2000 0.2000 0.0 0.0000 0.2 0.200
2 0.0000 0.0000 0.0 0.0000 0.0 0.000
Y 15 0.7000 1.4000 1.5 1.0000 0.7 1.400
30 0.5000 0.3000 1.0 0.4000 0.5 0.400
45 0.2000 0.0000 0.6 0.0000 0.2 0.000
Z 30 1.8000 2.3000 0.6 0.7000 1.8 2.300
60 1.0000 0.5000 0.3 0.4000 1.0 0.500
90 0.3000 0.2000 0.0 0.2000 0.4 0.200
Mean 0.5875 0.6125 0.5 0.3375 0.6 0.625
Если вы хотите отдельное среднее значение для каждой группы, то объедините.Здесь мы можем использовать .agg
, указав список, и stack
, чтобы получить MultiIndex
, который нам нужен без особых ручных манипуляций.Теперь вы можете выполнить обобщение для нескольких функций агрегирования .agg(['mean', 'std', 'size'])
, и это добавит все из них с функцией agg на уровне индекса T
.
import pandas as pd
pd.concat([df, df.groupby(level=0).agg(['mean']).stack(1)])
A B C D E F
Algo T
X 1 0.200000 0.200000 0.000000 0.000000 0.200000 0.2
2 0.000000 0.000000 0.000000 0.000000 0.000000 0.0
Y 15 0.700000 1.400000 1.500000 1.000000 0.700000 1.4
30 0.500000 0.300000 1.000000 0.400000 0.500000 0.4
45 0.200000 0.000000 0.600000 0.000000 0.200000 0.0
Z 30 1.800000 2.300000 0.600000 0.700000 1.800000 2.3
60 1.000000 0.500000 0.300000 0.400000 1.000000 0.5
90 0.300000 0.200000 0.000000 0.200000 0.400000 0.2
X mean 0.100000 0.100000 0.000000 0.000000 0.100000 0.1
Y mean 0.466667 0.566667 1.033333 0.466667 0.466667 0.6
Z mean 1.033333 1.000000 0.300000 0.433333 1.066667 1.0