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

