问题描述
我有一个带有多级标题的数据框,如下所示:
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',('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
有没有办法在保持第一列标题为整数的同时计算平均值?
解决方法
这只有一个解决方案:
import pandas as pd
iterables = [[1,2,3,4],["x","y"]]
array = [
[1,4,7,1,5,2],[2,6,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
步骤:
- 选择所有带有
df.xs("x",axis=1)
的“x”列 - 使用
.loc[:,1:3]
仅选择第 1 到第 3 列 - 用
.mean(axis=1)
计算平均值