Skip to main content
 首页 » 编程设计

python之MultiIndex 数据帧的平均值

2025年05月04日21java哥

我有以下数据框

                 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