如何修正Pandas绘图代码,按周展示Units总和与单位成本?
按周聚合并可视化Units总和与单位成本
原始数据
Units Cost Year Week Category 20224 100000 2023 24 Apple 30114 150000 2024 24 Orange 35000 175000 2023 15 Orange 10000 200000 2023 14 Apple
需求说明
需要按周展示Units总和与单位成本,使用Pandas和Matplotlib绘制柱状图/散点图。
原代码问题
原代码通过df['Year'].value_counts()统计的是Year的出现次数,并非Units的总和,无法满足需求。
解决方案
步骤1:数据聚合
先按Year和Week分组,计算每组的Units总和、Cost总和,再推导单位成本:
import pandas as pd import matplotlib.pyplot as plt # 构建数据框 data = { 'Units': [20224, 30114, 35000, 10000], 'Cost': [100000, 150000, 175000, 200000], 'Year': [2023, 2024, 2023, 2023], 'Week': [24, 24, 15, 14], 'Category': ['Apple', 'Orange', 'Orange', 'Apple'] } df = pd.DataFrame(data) # 分组聚合计算 weekly_agg = df.groupby(['Year', 'Week']).agg( Total_Units=('Units', 'sum'), Total_Cost=('Cost', 'sum') ).reset_index() # 计算单位成本 weekly_agg['Unit_Cost'] = weekly_agg['Total_Cost'] / weekly_agg['Total_Units']
步骤2:可视化展示
分别绘制Units总和的柱状图和单位成本的散点图:
plt.figure(figsize=(12, 6)) # 左侧:Units总和柱状图 ax1 = plt.subplot(1, 2, 1) weekly_agg.plot(x='Week', y='Total_Units', kind='bar', ax=ax1, color='cornflowerblue') ax1.set_title('每周Units总和') ax1.set_xlabel('周(年-周)') ax1.set_ylabel('Units总和') # 自定义x轴标签为「年-周」格式 ax1.set_xticklabels([f"{y}-{w}" for y, w in zip(weekly_agg['Year'], weekly_agg['Week'])], rotation=45) # 右侧:单位成本散点图 ax2 = plt.subplot(1, 2, 2) weekly_agg.plot(x='Week', y='Unit_Cost', kind='scatter', ax=ax2, color='darkorange', s=120) ax2.set_title('每周单位成本') ax2.set_xlabel('周(年-周)') ax2.set_ylabel('单位成本') ax2.set_xticklabels([f"{y}-{w}" for y, w in zip(weekly_agg['Year'], weekly_agg['Week'])], rotation=45) plt.tight_layout() plt.show()
代码说明
groupby(['Year', 'Week'])确保按「年-周」维度分组,避免不同年份的同周数据混淆agg()方法指定对Units和Cost求和,生成Total_Units和Total_Cost字段- 单位成本通过总成本除以总Units计算,反映每周的平均单位成本
- 可视化时自定义x轴标签为「年-周」,更清晰展示时间维度
内容的提问来源于stack exchange,提问作者PBi
相关产品推荐
相关产品推荐

