获取多索引熊猫数据框的元素均值

时间:2018-10-31 14:24:39

标签: python pandas dataframe multi-index

我创建了一个multiIndex数据框,如下所示:

df= 
            var0  var1  var2  var3  var4 ... var137
    0   0    10    2     0     5     1    ...  9  
        1    40    2     3     4     13   ...  7  
        2    60    3     5     6     3    ...  10
        ...
        111  0    1      1     0     2    ...  0
    1   0    1    20     10    5     1    ...  0  
        1    4    20     13    4     10   ...  3  
        2    6    30     15    6     1    ...  1
        ...
        111  0    1      1     0     2    ...  1
    2   0    0    2      0     5     16   ...  9  
        1    0    12     83    34    13   ...  17  
        2    0    30     56    66    3    ...  10
        ...
        111  0    1      1     0     2    ...  0
    ... 
    9   0    0    2      0     5     16   ...  9  
        1    0    12     83    34    13   ...  17  
        2    0    30     56    66    3    ...  10
        ...
        111  0    1      1     0     2    ...  1

这是我生成此数据帧的方式:

frames = []
col_names = list()
col_names += [('var%d' % (j )) for j in range(112)]
for i in range(0, 10):
    result = get_results(...)
    df_tmp = pd.DataFrame(data=results, columns=col_names)
    frames.append(df_tmp)
df = pd.concat(frames, axis=0, keys=range(0, 112))

我需要通过以下方式获得均值:

        var0                var1              var2  var3  ... var137
    0   (10+1+0+...)/10    (2+20+2+...)/10       ...          (9+0+9+...)/10
    1   (40+4+0+...)/10    (2+20+12+...)/10      ...          (7+3+17+...)/10  
    2   (60+6+0+...)/10    (3+30+30+...)/10      ...          (10+1+10+...)/10
    ...
    111     ...

因此,结果是形状为2D的表格(112、138)。 df.values.mean(axis=1)df.values.mean(axis=0)将返回我不需要的所有列/行的均值。我怎么能得到这个意思?

1 个答案:

答案 0 :(得分:1)

您可以尝试将meanlevel=1

df.mean(level=1)
Out[170]: 
          var0       var1       var2  var3       var4    var137
2                                                              
0     3.666667   8.000000   3.333333   5.0   6.000000  6.000000
1    14.666667  11.333333  33.000000  14.0  12.000000  9.000000
2    22.000000  21.000000  25.333333  26.0   2.333333  7.000000
111   0.000000   1.000000   1.000000   0.0   2.000000  0.333333