pandas<1.4(如1.3.5)中如何隐藏Styler的指定索引层级
pandas 1.3.5 Styler隐藏指定索引层级实现方案
问题说明
当前环境为pandas 1.3.5版本,需要复刻pandas 1.4版本新增的hide(axis="index", level="level_name")功能,隐藏多级索引中名为index的第三层索引。此前通过nth-child选择器设置display:none的方案,因未匹配到正确的单元格选择器未生效。
错误方案原因
pandas渲染带多级索引的表格时,索引单元格会生成专属类名,且存在单元格合并逻辑,简单按列序号匹配会漏选、错选目标单元格,无法达到隐藏效果。
可用实现方法
方法1:CSS类名精准匹配(推荐,效果与原生1.4+版本一致)
pandas 1.3.5渲染的索引单元格自带level<X>格式的类名,其中X为索引层级序号,从0开始计数。示例中需要隐藏的index是第三层索引,对应level2,直接匹配该类名的单元格设置隐藏即可:
def multi_highlighter(row, range_colors): def find_color(value): for color, threshold in range_colors.items(): if value < threshold: return color return "white" return [f"background-color: {find_color(v)}" for v in row] range_colors = {"red": 18, "orange": 100} data = pd.DataFrame({ "Ex Date": ['2022-06-20', '2022-06-20', '2022-06-20', '2022-06-20', '2022-06-20', '2022-06-20', '2022-07-30', '2022-07-30', '2022-07-30'], "Portfolio": ['UUU-SSS', 'UUU-SSS', 'UUU-SSS', 'RRR-DDD', 'RRR-DDD', 'RRR-DDD', 'KKK-VVV', 'KKK-VVV', 'KKK-VVV'], "Position": [120, 90, 110, 113, 111, 92, 104, 110, 110], "Strike": [18, 18, 19, 19, 20, 20, 15, 18, 19], }) ( data .reset_index() .set_index(["Ex Date", "Portfolio", "index"]) .style .apply(multi_highlighter, range_colors=range_colors, axis=1) # 新增以下样式规则即可隐藏第三层索引 .set_table_styles([ { 'selector': 'th.level2, td.level2', 'props': [('display', 'none')] } ], overwrite=False) )
提示:如果需要隐藏其他索引层级,先通过
df.index.names确认索引顺序,将选择器中的level2替换为对应层级序号即可,第一层索引对应level0,第二层对应level1。
方法2:预处理数据结构(无CSS依赖)
如果不需要依赖索引做样式渲染,可以在生成Styler前先把要隐藏的索引层级移除。需要注意:示例中加入index层的作用是避免前两层索引重复值被合并显示,如果直接移除该层,同日期、同组合的索引单元格会自动合并,如果不需要保留逐行索引的展示效果,可以直接在set_index时不传入index字段,从根源上不需要做隐藏处理。
内容的提问来源于stack exchange,提问作者abdelgha4
相关产品推荐
相关产品推荐

