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

如何按州总记录数降序排列堆叠柱状图?Pandas排序求助

解决按州总记录数降序排列堆叠柱状图的问题

我明白你的问题啦——你已经按State和Category对DataFrame分组求和,但想让堆叠柱状图里的州按总记录数降序排列,同时保留每个州下三类数据的原有结构,之前尝试的sort_values方法没达到预期效果对吧?

问题根源

你之前的两段代码都没精准匹配需求:

  • 第一段my_df_sort = my_df.groupby(['State','Category']).sum().sort_values(by=['State','Number of Records'])是按州名+单类别记录数排序,不是按州的总记录数排序;
  • 第二段my_df_sort2= my_df.groupby(['State']).sum().sort_values(by=['Number of Records'], ascending=False)得到的是仅包含州和总记录数的汇总DataFrame,丢失了Category的分层结构,没法直接生成堆叠柱状图。

解决方案:先定排序顺序,再重排原分组数据

我们可以先提取按总记录数降序的州顺序,再让原分组后的DataFrame遵循这个顺序排列,完美保留原有格式:

步骤1:获取排序后的州顺序

先计算每个州的总记录数,提取降序排列的州名称列表:

import pandas as pd

# 计算每个州的总记录数,按降序排序后提取州名
state_sorted_order = my_df.groupby('State')['Number of Records'].sum().sort_values(ascending=False).index

步骤2:重排原分组DataFrame(两种方式可选)

方式1:转为分类类型(适合后续绘图自动识别顺序)

如果你的分组数据已经展开(非多级索引),可以把State列转为Categorical类型并指定顺序:

# 先完成分组求和并展开索引
my_df_grouped = my_df.groupby(['State','Category']).sum().reset_index()
# 将State转为分类,指定排序后的顺序
my_df_grouped['State'] = pd.Categorical(my_df_grouped['State'], categories=state_sorted_order, ordered=True)
# 绘制堆叠柱状图
my_df_grouped.pivot(index='State', columns='Category', values='Number of Records').plot(kind='bar', stacked=True)
方式2:重排多级索引(适合保留分组后的多级索引结构)

如果想保留['State','Category']的多级索引结构,可以用reindex指定level来重排:

# 完成分组求和(保留多级索引)
my_df_grouped = my_df.groupby(['State','Category']).sum()
# 按预定义的州顺序重排索引
my_df_grouped_sorted = my_df_grouped.reindex(state_sorted_order, level='State')
# 绘制堆叠柱状图(直接用unstack展开类别)
my_df_grouped_sorted['Number of Records'].unstack().plot(kind='bar', stacked=True)

这样处理后,你的堆叠柱状图就会按州的总记录数从高到低排列,比如加利福尼亚州(总记录2001)会排在首位,同时每个州下的三类数据结构完全保留。

内容的提问来源于stack exchange,提问作者Ellen-Yilun Wang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:34:17