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

MultiIndex DataFrame的statsmodels马赛克图绘制问题求助

解决马赛克图可视化MultiIndex频次的问题

问题原因

  • 直接用带MultiIndex的hdf调用mosaic时,函数会把索引当作列名查找,但MultiIndex是行索引而非列,因此抛出KeyError。
  • 仅传入["count"]时,函数只会将count作为唯一分类维度,导致所有矩形大小均等,无法体现分类组合的频次占比。

修正方案

将MultiIndex还原为普通列,并指定分类变量与权重列:

import pandas as pd
from statsmodels.graphics.mosaicplot import mosaic

rows=[
    {"Mode":"ID", "SortBy":"Start", "SortDir":"ASC", "count":10},
    {"Mode":"ID", "SortBy":"Start", "SortDir":"DESC", "count":100},
    {"Mode":"FULL", "SortBy":"End", "SortDir":"DESC", "count":1000}
]
df=pd.DataFrame(rows)
# 将groupby后的MultiIndex转为普通列
hdf=df.groupby(["Mode", "SortBy", "SortDir"]).sum("count").reset_index()
# 指定分类变量,并用count作为权重控制矩形大小
mosaic(hdf, ["Mode", "SortBy", "SortDir"], weights="count")

优化标签显示(可选)

如果需要在矩形内显示分类组合及对应频次,可自定义标签生成函数:

def custom_label(key):
    # 根据分类组合匹配对应的count值
    count = hdf[(hdf["Mode"] == key[0]) & 
                (hdf["SortBy"] == key[1]) & 
                (hdf["SortDir"] == key[2])]["count"].values[0]
    return f"{key[0]}\n{key[1]}\n{key[2]}\nCount: {count}"

# 调用时传入自定义标签函数
mosaic(hdf, ["Mode", "SortBy", "SortDir"], weights="count", labelizer=custom_label)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:28:17