pandas 多索引除法聚合计数

问题描述 投票:0回答:1

我的原始数据是这样的

    level0  level1  level2
0   0       A       foo
1   0       A       bar
2   0       B       foo
3   0       B       foo
4   0       B       foo
5   0       B       bar
6   1       A       foo
7   1       A       bar

然后我尝试将计数分组 df.groupby(['level0', 'level1', 'level2']).size()

得到这个

level0  level1  level2
0       A       foo            1
                bar            1
        B       foo            3
                bar            1
1       A       foo            1
                bar            1
        B       foo            1
                bar            1
2       A       foo            1
                bar            1
        B       foo            1
                bar            1

现在我只想将 level2 的计数除以 bar/foo 的比率,得到这样的结果:

level0  level1      {bar counts/foo counts}
0       A           1.00
        B           0.33
1       A           1.00
        B           1.00
2       A           1.00
        B           1.00

也许我什至把原来的groupby设置错了,但也尝试过.div、.apply等,但有心理障碍。谢谢您的指导!

pandas dataframe multi-index
1个回答
0
投票

代码

# your groupby code
tmp = df.groupby(['level0', 'level1', 'level2']).size() 

# get desired output by xs and div
out = tmp.xs('bar', level=2).div(tmp.xs('foo', level=2))

输出:

level0  level1
0       A         1.000000
        B         0.333333
1       A         1.000000
© www.soinside.com 2019 - 2024. All rights reserved.