Python pandas设置表格梯度背景色失效,如何为指定列配置不同渐变颜色
问题解决方法
你的输出结果output是二级多层列索引结构,第一层级为年份、第二层级为profit/loss/status/index指标,直接在subset中传入指标名称无法匹配到对应列,因此样式不生效。
解决思路:无需硬编码年份,通过二级索引批量匹配同一指标下所有年份的列,分别为不同指标设置对应色系的渐变即可。
修改后的可运行代码如下:
import pandas as pd import numpy as np df = pd.read_excel('products2.xlsx', index_col=[0]) df.columns = df.columns.str.split('_', expand=True) new_data = df.stack(0) new_data1 = new_data.eval('status = profit - loss + other') new_data2 = new_data1.eval('index = (profit / status) / (loss / status)') output = new_data2.unstack(1).swaplevel(0,1, axis=1).sort_index(axis=1) # 按二级索引匹配各指标对应的所有年份列,无需硬编码年份 profit_cols = output.columns[output.columns.get_level_values(1) == 'profit'] loss_cols = output.columns[output.columns.get_level_values(1) == 'loss'] status_cols = output.columns[output.columns.get_level_values(1) == 'status'] index_cols = output.columns[output.columns.get_level_values(1) == 'index'] # 分别为不同指标设置对应色系的渐变 style = output.style\ .background_gradient(subset=profit_cols, cmap='Greens')\ .background_gradient(subset=loss_cols, cmap='Reds')\ .background_gradient(subset=status_cols, cmap='Blues')\ .background_gradient(subset=index_cols, cmap='Purples') # 可自行更换为其他色系 style.to_excel('output_products.xlsx')
如果需要调整渐变深浅、颜色区间,可以给background_gradient添加vmin、vmax、low、high参数调整,cmap参数也可以替换为matplotlib支持的任意色系。
内容的提问来源于stack exchange,提问作者project.py
相关产品推荐
相关产品推荐

