You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Pandas多级索引分组统计结果计算bar/foo计数比值?

问题描述

原始数据:

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

执行分组计数后得到多级索引结果:

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

需求:计算每个level0+level1分组下,level2中bar计数与foo计数的比值。

解决方案

方法1:基于已有分组结果处理

先将多级索引的计数结果转换为宽表结构,再直接计算比值:

# 假设已有的分组计数结果为counts
counts = df.groupby(['level0', 'level1', 'level2']).size()

# 将level2从索引转为列,缺失分组填充0
counts_wide = counts.unstack(level='level2', fill_value=0)

# 计算bar/foo比值
bar_foo_ratio = counts_wide['bar'] / counts_wide['foo']

# 可选:转为更易读的格式
bar_foo_ratio = bar_foo_ratio.rename('bar/foo_ratio').reset_index()

执行后得到结果:

level0 level1  bar/foo_ratio
0       0      A       1.000000
1       0      B       0.333333
2       1      A       1.000000
3       1      B       1.000000
4       2      A       1.000000
5       2      B       1.000000

方法2:用pivot_table一步完成统计与计算

直接通过透视表生成foo和bar的计数列,再计算比值,省去单独分组的步骤:

# 生成透视表,统计各分组计数
pivot_df = df.pivot_table(
    index=['level0', 'level1'],
    columns='level2',
    aggfunc='size',
    fill_value=0
)

# 计算比值
bar_foo_ratio = pivot_df['bar'] / pivot_df['foo']

问题分析

之前用.div或.apply失败,大概率是因为多级索引的结构未处理到位——level2作为索引层级而非列,无法直接针对foo和bar做元素级除法。通过unstack或pivot_table将level2转为列后,就能轻松实现比值计算。

内容的提问来源于stack exchange,提问作者jeff_new

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:32:48