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

如何在pandas中对字符串分类并使用seaborn按类别着色后导出Excel

实现方案
  • 第一步:构建字符到分类的映射字典,方便快速查询每个字符所属的分类
  • 第二步:生成从红到绿的5阶渐变颜色,对应5个分类的着色需求
  • 第三步:编写单元格样式匹配函数,仅对type为new的列生效
  • 第四步:导出带样式的Excel文件

完整可运行代码

import pandas as pd
import numpy as np
import string
import seaborn as sns

# 原有生成测试数据的代码
index = pd.MultiIndex.from_product([[2020], [1, 2, 3, 4]],
                                   names=['year', 'q'])
columns = pd.MultiIndex.from_product([['Items1', 'Items2', 'Items3'], ['new', 'old']],
                                     names=['Items', 'type'])

np.random.seed(123)
data = np.random.choice(list(string.ascii_lowercase), (4,6))
Ldata = pd.DataFrame(data, index=index, columns=columns)

# 定义分类规则
category1 = ['a', 'b', 'c', 'd', 'e']
category2 = ['f', 'g', 'h', 'i', 'j', 'k']
category3 = ['l', 'm', 'n', 'o', 'p']
category4 = ['q', 'r', 's', 't', 'u', 'w']
category5 = ['x', 'y', 'z']

# 1. 构建字符到分类编号的映射
cat_map = {}
for cat_id, cat_list in enumerate([category1, category2, category3, category4, category5], start=1):
    for char in cat_list:
        cat_map[char] = cat_id

# 2. 生成红到绿的5阶渐变颜色,也可以手动替换为自定义的hex颜色列表
color_palette = sns.diverging_palette(h_neg=10, h_pos=130, n=5, s=90, l=70).as_hex()

# 3. 样式匹配函数
def assign_cell_color(val):
    # 查询字符所属分类,没有匹配的分类则不添加样式
    cat_id = cat_map.get(val)
    if not cat_id:
        return ""
    return f"background-color: {color_palette[cat_id - 1]}"

# 4. 仅对第二级列索引为new的列应用样式
styled_df = Ldata.style.applymap(
    assign_cell_color,
    subset=(Ldata.index, Ldata.columns[Ldata.columns.get_level_values('type') == 'new'])
)

# 导出Excel,需要提前安装依赖:pip install openpyxl
styled_df.to_excel("category_colored_output.xlsx", engine="openpyxl", index=True)

自定义颜色说明

如果不需要依赖seaborn生成颜色,可直接替换color_palette为自定义的颜色列表,示例:

color_palette = ['#ff4444', '#ffbb33', '#ffff99', '#99cc00', '#009933']

列表顺序对应category1到category5的颜色,可根据实际视觉需求调整色值。

内容的提问来源于stack exchange,提问作者project.py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:45:03