假设我有一个带有多索引列对象的数据框,其中第一级定义了一些类别,第二级定义了公式的一个组件。考虑数据框 df
np.random.seed([3,1415])
mux = pd.MultiIndex.from_product([list('XYZ'), list('kap'), ])
df = pd.DataFrame(np.random.randint(1, 5, size=(2, 9)), columns=mux)
df
X Y Z
k a p k a p k a p
0 1 4 3 4 3 3 4 3 4
1 2 4 2 3 4 4 1 4 3
我想为每个 X
、Y
和 Z< 计算公式
k * a ** p
/
我可以分配给一个单独的数据框
x = df.X
x.eval('k * a ** p')
0 64
1 32
dtype: int64
但是我如何一次性获得 X
、Y
和 Z
。
最终结果应该是这样的:
X Y Z
0 64 108 324
1 32 768 64
最佳答案
1). 一种方法是 groupby
level
In [1841]: df.groupby(level=0, axis=1).apply(lambda x: x[x.name].eval('k*a**p'))
Out[1841]:
X Y Z
0 64 108 324
1 32 768 64
2). 另一种,按级别循环。
In [1818]: pd.DataFrame({c: df[c].eval('k*a**p') for c in df.columns.levels[0]})
Out[1818]:
X Y Z
0 64 108 324
1 32 768 64
关于python - 如何根据多索引列第二级中的名称计算表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46047642/