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

如何用Pandas制作按总销售额排序的公司-产品堆叠条形图

解决堆叠条形图+按总销售额排序的需求

嘿,我明白你想要的效果——既能看到每家公司各产品的销售额堆叠情况,又能让公司按总销售额从高到低排列,同时还不丢失产品信息对吧?之前的groupby只算总销售额确实会丢掉产品维度,咱们换个思路来处理:

第一步:先把你的示例数据构造出来(方便复现)

import pandas as pd
import matplotlib.pyplot as plt

# 构造你的原始DataFrame
data = {
    'Company': ['Com1', 'Com2', 'Com1', 'Com3'],
    'Product': ['Prod1', 'Prod1', 'Prod2', 'Prod1'],
    'Sale Amount': ['$100', '$30', '$120', '$90'],
    'Transaction': ['T1', 'T2', 'T3', 'T4']
}
pandaFrame = pd.DataFrame(data)

# 先把销售额转换成数值类型(去掉$符号)
pandaFrame['Sale Amount'] = pandaFrame['Sale Amount'].str.replace('$', '').astype(float)

第二步:确定公司的排序顺序(按总销售额从高到低)

先计算每家公司的总销售额,然后提取排序后的公司名称列表,后续用这个列表来调整图表的X轴顺序:

# 计算每家公司总销售额并排序
company_total = pandaFrame.groupby('Company')['Sale Amount'].sum().sort_values(ascending=False)
# 提取排序后的公司名称
sorted_companies = company_total.index.tolist()

第三步:重构数据为透视表(保留产品维度)

用透视表把数据转换成「行=公司,列=产品,值=销售额求和」的格式,这样每个公司的每个产品销售额都能保留:

# 构建透视表,按公司和产品求和销售额
sales_pivot = pandaFrame.pivot_table(
    index='Company',
    columns='Product',
    values='Sale Amount',
    aggfunc='sum',
    fill_value=0  # 没有销售的产品填0
)

# 按照之前的总销售额排序顺序重新排列行
sales_pivot = sales_pivot.loc[sorted_companies]

第四步:绘制堆叠条形图

现在直接用pandas的plot方法就能生成堆叠条形图了:

# 绘制堆叠条形图
sales_pivot.plot(kind='bar', stacked=True, figsize=(10, 6))

# 添加图表标签和标题
plt.xlabel('Company')
plt.ylabel('Total Sales Amount')
plt.title('Stacked Sales by Company and Product (Sorted by Total Sales)')
plt.legend(title='Product')
plt.show()

这样出来的图表就完全符合你的需求了:X轴是按总销售额从高到低排列的公司,每个条形是该公司各产品销售额的堆叠,能清晰看到每家公司内部各产品的贡献占比~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:03:31