如何在pandas Multinindex中获取两个子列之间的百分比?

3

我有这个,

       col1     col2    
       no yes   no yes
index                  
A       2   8    2   6
B       0   2    1   1

我想要“是”列的百分比,如下所示,
        col1  col2    
        yes   yes
col0                  
A       0.8    0.75
B       1.0    0.5
1个回答

5

在算术方法中使用axislevel参数。

df.div(df.sum(axis=1, level=0), axis=1, level=0)

  col1       col2      
    no  yes    no   yes
A  0.2  0.8  0.25  0.75
B  0.0  1.0  0.50  0.50

df.div(df.sum(axis=1, level=0), axis=1, level=0).loc[:, pd.IndexSlice[:, 'yes']]

  col1  col2
   yes   yes
A  0.8  0.75
B  1.0  0.50

变体



df.div(df.sum(axis=1, level=0), axis=1, level=0).xs('yes', axis=1, level=1)

  col1  col2
   yes   yes
A  0.8  0.75
B  1.0  0.50

删除第二级

df.div(df.sum(axis=1, level=0), axis=1, level=0).xs('yes', axis=1, level=1)

   col1  col2
A   0.8  0.75
B   1.0  0.50

简略版

df.div(df.sum(1, level=0), 1, 0).xs('yes', 1, 1)

   col1  col2
A   0.8  0.75
B   1.0  0.50

详情

df.sum(axis=1, level=0)

   col1  col2
A    10     8
B     2     2

我们可以将 div 指向使用这个结果。
df.div(df.sum(axis=1, level=0), axis=1, level=0)

  col1       col2      
    no  yes    no   yes
A  0.2  0.8  0.25  0.75
B  0.0  1.0  0.50  0.50

设置

df = pd.DataFrame(
    [[2, 8, 2, 6], [0, 2, 1, 1]],
    list('AB'),
    pd.MultiIndex.from_product([['col1', 'col2'], ['no', 'yes']])
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接