我有以下数据框
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 ... ... ... ... ... ...
答案 0 :(得分:3)
您可以使用.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
索引级别添加所有具有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 :(得分:2)
如果您确定实际上要在同一df中包含一行作为平均值,则可以:
获取平均值的pd系列。
给它一个符合MultiIndex的名称。
将其附加到数据框。
df = df.append(df.mean().rename(('Mean', '')))