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
相关产品推荐
相关产品推荐

