python - 如何根据多索引列第二级中的名称计算表达式

标签 python pandas

假设我有一个带有多索引列对象的数据框,其中第一级定义了一些类别,第二级定义了公式的一个组件。考虑数据框 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

我想为每个 XYZ< 计算公式 k * a ** p/

我可以分配给一个单独的数据框

x = df.X

x.eval('k * a ** p')

0    64
1    32
dtype: int64

但是我如何一次性获得 XYZ

最终结果应该是这样的:

    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/

相关文章:

python - 打印一个列表,然后横跨

python - App 引擎中的记录器实体

python - 将元组插入空的 Pandas 数据框中

Python:向 pandas 数据框添加一列

python - 计算多个子字符串出现在数据框列中的次数

python - 在 python 中抓取页面时保留非拉丁字符

python - 如何获取以自定义 Plone 灵巧表单显示的字段?

pandas - GridSearchCV : "TypeError: ' StratifiedKFold' object is not iterable"

python - 在 anaconda 上将 pip 升级到 ver18

Python Pandas - df.loc - 添加附加条件不起作用