计算多级选定列的平均值 header

Calculate mean of selected columns with multilevel header

我有一个包含多级 header 列的数据框,如下所示:

name   1          2         3        4
       x     y    x    y    x    y   x   y
A      1     4    3    7    2    1   5   2
B      2     2    6    1    4    5   1   7

如何计算 1x、2x 和 3x 而不是 4x 的平均值? 我试过了:

df['mean']= df[('1','x'),('2','x'),('3','x')].mean()

这没有用,它是 syas 键错误。我想得到:

name   1          2         3        4     mean
       x     y    x    y    x    y   x   y  
A      1     4    3    7    2    1   5   2   2
B      2     2    6    1    4    5   1   7   4

有没有办法在将第一列 header 保持为整数的同时计算平均值?

这是唯一的一个解决方案:

import pandas as pd

iterables = [[1, 2, 3, 4], ["x", "y"]]
array = [
    [1, 4, 3, 7, 2, 1, 5, 2],
    [2, 2, 6, 1, 4, 5, 1, 7]
]
index = pd.MultiIndex.from_product(iterables)
df = pd.DataFrame(array,  index=["A", "B"], columns=index)

df["mean"] = df.xs("x", level=1, axis=1).loc[:,1:3].mean(axis=1)

print(df)

   1     2     3     4    mean
   x  y  x  y  x  y  x  y     
A  1  4  3  7  2  1  5  2  2.0
B  2  2  6  1  4  5  1  7  4.0

步骤:

  1. Select 所有具有 df.xs("x", level=1, axis=1)
  2. 的“x”列
  3. Select 只有第 1 到 3 列 .loc[:,1:3]
  4. .mean(axis=1)计算平均值