多索引数据帧的平均值

2024-04-26 11:22:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧

                 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

^{pr2}$

Tags: 数据algopr2
2条回答

您可以使用.loc来分配平均行。MultiIndex的值是元组,因此相应地分配:

df.loc[('Mean', ''), :] = df.mean()

输出:

^{pr2}$

如果你想要一个单独的平均数,每个组,然后连接。在这里,我们可以使用.agg指定一个列表,stack来获得我们需要的MultiIndex,而不需要太多的手动操作。现在可以将其推广到多个聚合函数.agg(['mean', 'std', 'size']),它将在T索引级别添加所有具有agg函数的聚合函数。在

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

如果您确实希望在同一数据框中有一行表示平均值,则可以:

  1. 得到一个pd系列平均值的。

  2. 给它一个符合多重索引的名称。

  3. 将其附加到数据帧。在

    df = df.append(df.mean().rename(('Mean', '')))
    

相关问题 更多 >