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

Pandas中MultiIndex列(count)的占比计算需求

给带MultiIndex的Pandas DataFrame计算占比(新增percent列)

嘿,我来帮你搞定这个MultiIndex DataFrame的占比计算问题!我猜你可能卡在了保持原索引结构的同时计算占比——毕竟直接用sum()会扁平化索引,导致无法直接匹配回原数据。下面我给你两种最常见场景的解决方案,附示例代码:

先构造一个示例数据(方便你跟着试)

先造一个带双层MultiIndex的DataFrame,和你的场景对齐:

import pandas as pd

data = {'count': [10, 20, 15, 25, 5, 30]}
index = pd.MultiIndex.from_tuples(
    [('A', 'X'), ('A', 'Y'), ('B', 'X'), ('B', 'Y'), ('C', 'X'), ('C', 'Y')],
    names=['group1', 'group2']
)
df = pd.DataFrame(data, index=index)

输出的df长这样:

count
group1 group2       
A      X       10
       Y       20
B      X       15
       Y       25
C      X        5
       Y       30

场景1:按某一层索引计算分组内的占比

比如你想算每个group1下,各个group2的count占该组总count的比例,用groupby + transform就能完美解决——transform会返回和原DataFrame同形状的Series,不会破坏MultiIndex结构:

# 按第一层索引group1计算组内占比
df['percent'] = df['count'] / df.groupby(level='group1')['count'].transform('sum')

# 如果是按第二层索引group2计算,改level参数就行
# df['percent'] = df['count'] / df.groupby(level='group2')['count'].transform('sum')

计算后df的结果:

count   percent
group1 group2              
A      X       10  0.333333
       Y       20  0.666667
B      X       15  0.375000
       Y       25  0.625000
C      X        5  0.142857
       Y       30  0.857143

场景2:计算全局总计的占比

如果是所有count占全局总count的比例,那就更简单了,直接用全局总和除以每个count即可:

# 先拿到全局总计(你说已经能获取这个值,直接用你的变量就行)
total_count = df['count'].sum()

# 计算全局占比
df['percent'] = df['count'] / total_count

结果会是每个count占总和(10+20+15+25+5+30=105)的比例:

count   percent
group1 group2              
A      X       10  0.095238
       Y       20  0.190476
B      X       15  0.142857
       Y       25  0.238095
C      X        5  0.047619
       Y       30  0.285714

可选:把占比转成百分比格式

如果想要更直观的百分比显示,可以做个格式化:

# 保留两位小数并转成百分比数值
df['percent'] = (df['percent'].round(4) * 100)

# 或者用style美化成带%符号的显示(仅用于展示,不修改数据)
df.style.format({'percent': '{:.2f}%'})

这样就能完美保持MultiIndex结构,同时新增你需要的percent列啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:19:31