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

如何用Pandas为列中重复项设置不同颜色高亮(Python)

解决Pandas数据列重复项高亮及调色板优化问题

一、修改现有代码的调色板

你的代码使用了Matplotlib默认的高对比度颜色字典,视觉体验差。可以替换为柔和的调色板,以下是两种可行方案:

方法1:使用Seaborn柔和分类调色板

先安装依赖库:

pip install seaborn

替换代码如下:

import seaborn as sns

# 获取IMSI列的唯一值
unique_imsi = unique_fraud['IMSI'].unique()
# 生成匹配数量的柔和调色板并转为十六进制格式
palette = sns.color_palette("husl", n_colors=len(unique_imsi)).as_hex()

# 构建颜色映射字典
colors = dict(zip(unique_imsi, [f'background-color: {c}' for c in palette]))

# 应用高亮样式
unique_fraud.style.applymap(colors.get, subset=['IMSI'])

方法2:自定义低饱和度颜色列表

如果不想依赖Seaborn,可直接定义一组柔和颜色:

# 自定义柔和颜色集合(可根据需求增减)
soft_colors = [
    "#e6f7ff", "#fff7e6", "#f6ffed", "#fff1f0", "#f9f0ff",
    "#e6f7ff", "#fff7e6", "#f6ffed", "#fff1f0", "#f9f0ff"
]
# 循环复用颜色以匹配唯一值数量
color_cycle = soft_colors * (len(unique_imsi) // len(soft_colors) + 1)
colors = dict(zip(unique_imsi, [f'background-color: {c}' for c in color_cycle[:len(unique_imsi)]]))

unique_fraud.style.applymap(colors.get, subset=['IMSI'])

二、仅高亮重复出现的项(更精准逻辑)

原代码会给所有IMSI(包括仅出现一次的)上色,若只需标记重复出现的条目,可使用以下逻辑:

import seaborn as sns

def highlight_duplicates(s):
    # 筛选出当前列中重复出现的值
    duplicated_vals = s.duplicated(keep=False)
    # 为重复值分配柔和调色板
    unique_dupes = s[duplicated_vals].unique()
    palette = sns.color_palette("pastel", n_colors=len(unique_dupes)).as_hex()
    color_map = dict(zip(unique_dupes, [f'background-color: {c}' for c in palette]))
    # 仅给重复值上色,非重复值保持默认样式
    return s.map(lambda x: color_map.get(x, ""))

# 应用高亮样式
unique_fraud.style.apply(highlight_duplicates, subset=['IMSI'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:40:29