Pandas,分组数据的算术运算

Pandas, arithmetic operation on grouped data

假设我有一个 pandas 数据框并且已经分组为

grp=df.groupby(['a','b' ]).sum()

现在我想为每个组 a 计算每列 b 的百分比, 例如:P1, aaaa = 11/484P1, aaac = 8/357N1, aaaa = 61/7183等等....

可重现的分组数据

pd.DataFrame({'aaaa': {('P 1', 0): 484,('P 1', 1): 11,}})

你可以这样做:

grp.loc[(slice(None), 1),:].droplevel(1)/grp.loc[(slice(None), 0),:].droplevel(1)

grp.loc[(slice(None), 1),:]grp.loc[(slice(None), 0),:] 的实践中,我只提取带有 b==1b==0 的行(自己尝试并查看输出);之后我需要删除 b 级别 (.droplevel(1)) 以使这两个对象具有相同的索引(列已经共享);最后我用 / 划分了这两个矩阵(现在我可以这样做了,因为现在它们有相同的索引和列)。希望清楚:)

您可以将 xs 用于 MultiIndex 的 select 特定级别:

out = df.xs(1, level=1) / df.xs(0, level=1)

输出:

         aaaa
P 1  0.022727