我有以下数据框
A B C D E F
Algo T
X 1 0.2 0.2 0.0 0.0 0.2 0.2
2 0.0 0.0 0.0 0.0 0.0 0.0
Y 15 0.7 1.4 1.5 1.0 0.7 1.4
30 0.5 0.3 1.0 0.4 0.5 0.4
45 0.2 0.0 0.6 0.0 0.2 0.0
Z 30 1.8 2.3 0.6 0.7 1.8 2.3
60 1.0 0.5 0.3 0.4 1.0 0.5
90 0.3 0.2 0.0 0.2 0.4 0.2
我想知道如何在底部显示一行,显示 A、B、C、... F 列的平均值
A B C D E F
Algo T
X 1 0.2 0.2 0.0 0.0 0.2 0.2
2 0.0 0.0 0.0 0.0 0.0 0.0
Y 15 0.7 1.4 1.5 1.0 0.7 1.4
30 0.5 0.3 1.0 0.4 0.5 0.4
45 0.2 0.0 0.6 0.0 0.2 0.0
Z 30 1.8 2.3 0.6 0.7 1.8 2.3
60 1.0 0.5 0.3 0.4 1.0 0.5
90 0.3 0.2 0.0 0.2 0.4 0.2
Mean ... ... ... ... ... ...
请您参考如下方法:
您可以使用 .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']) 并且它将在 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
