如何为Pandas多级索引DataFrame按每个游戏平台单独绘制销售趋势图
问题原因
你原有代码的循环逻辑存在错误:for platform in data_recent_decade: 实际是遍历DataFrame的列名,你当前的数据集只有total_sales_sum一列,因此只会执行1次循环,且绘制的是所有平台的汇总数据,自然不符合分平台绘图的要求。
正确实现方案
你需要先提取多级索引第一层级的所有唯一平台名称,循环时单独筛选每个平台对应的子数据再绘图即可,参考代码如下:
import pandas as pd import matplotlib.pyplot as plt # 原有数据预处理逻辑保留 data_recent_decade=data.query('year_of_release>=2006').pivot_table(index=['platform','year_of_release'],values=['total_sales'], aggfunc=['sum']) data_recent_decade.columns=['total_sales_sum'] # 获取所有唯一平台名 platforms = data_recent_decade.index.get_level_values('platform').unique() # 循环为每个平台绘图 for platform in platforms: # 筛选当前平台的所有数据,索引自动转为year_of_release,直接作为x轴 platform_data = data_recent_decade.loc[platform] # 绘图 platform_data.plot(y='total_sales_sum', marker='o', grid=True, figsize=(13,4)) plt.title(f"{platform} 年度销售额走势") plt.xlabel("发布年份") plt.ylabel("总销售额") plt.show()
可选优化
如果x轴年份显示为浮点数(比如2011.0)影响美观,可以在筛选数据后补充一行代码转换年份格式:
platform_data.index = platform_data.index.astype(int)
内容的提问来源于stack exchange,提问作者Nikita Tsekhanovich
相关产品推荐
相关产品推荐

