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

如何为Pandas DataFrame添加颜色计数列并排序Plotly图表Y轴

解决Plotly仪表盘按颜色计数排序的问题

1. 给DataFrame添加颜色计数列

先给你的数据框新增black、green、red三列,统计每个letter分组里对应颜色的出现次数,用crosstab实现最直观:

import pandas as pd

# 假设你的原始数据是df,包含letter、color、date这几列
color_counts = pd.crosstab(df['letter'], df['color'])
# 把计数结果合并回原始数据框,确保每个分组都能拿到对应计数
df = df.merge(color_counts, on='letter', how='left')

如果要仅按最新日期的颜色计数统计,先筛选最新日期的数据再计算:

# 提取数据里的最新日期
latest_date = df['date'].max()
# 只统计最新日期的各letter分组颜色计数
latest_color_counts = pd.crosstab(
    df[df['date'] == latest_date]['letter'], 
    df[df['date'] == latest_date]['color']
)
# 合并回原数据,缺失的计数填0避免后续报错
df = df.merge(latest_color_counts, on='letter', how='left').fillna(0)

2. 自定义排序规则并让Plotly遵循

Plotly绘图时会自动处理分组顺序,所以得把letter转成有序分类变量,强制它按你的计数规则排序:

按全量数据的颜色计数排序(比如green优先,其次red,最后black)

# 按green、red、black的降序排序,提取排序后的letter列表
sorted_letters = df.sort_values(
    by=['green', 'red', 'black'], 
    ascending=False
)['letter'].unique()
# 将letter转为有序分类,指定好顺序
df['letter'] = pd.Categorical(df['letter'], categories=sorted_letters, ordered=True)

仅按最新日期的计数排序

# 基于最新日期的计数结果排序,提取letter顺序
sorted_latest_letters = latest_color_counts.sort_values(
    by=['green', 'red', 'black'], 
    ascending=False
).index.tolist()
df['letter'] = pd.Categorical(df['letter'], categories=sorted_latest_letters, ordered=True)

3. 绘制Plotly图表

用处理好的数据框绘图,Y轴的letter就会严格按你设定的计数顺序排列,且每行内的颜色展示顺序不会改变:

import plotly.express as px

# 示例:绘制多变量随时间变化的折线图,按letter分栏,color区分变量
fig = px.line(df, x='date', y='your_value_column', color='color', facet_row='letter')
fig.show()

关键提醒

  • 把letter转为有序分类是核心,Plotly会完全尊重分类变量的预设顺序,不会再自行打乱
  • 不管你用折线图、条形图还是其他图表类型,这个排序逻辑都适用
  • 计数合并后填充0是为了避免NaN值干扰排序逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:36:20