使用pandas按工作日分组后如何绘制按日期和用户类型分组的柱状图
基于分组统计结果绘制分组柱状图的实现方案
你已经完成了分组统计得到df1,可以通过以下两种常用方式实现需求:
方法1:使用pandas内置绘图(无需额外安装第三方库)
首先需要将长格式的df1转为宽格式,方便按组别生成柱状图:
import matplotlib.pyplot as plt # 长表转宽表,缺失的组合默认填充为0 df_pivot = df1.pivot(index='day', columns='usertype', values='times').fillna(0) # 绘制分组柱状图 df_pivot.plot(kind='bar', figsize=(10, 6)) # 自定义图表样式 plt.xlabel('工作日') plt.ylabel('出现次数') plt.title('不同用户类型的工作日次数分布') plt.xticks(rotation=0) # 保持x轴标签水平显示 plt.legend(title='用户类型') plt.show()
方法2:使用seaborn绘图(样式更美观,支持直接使用长表)
如果已经安装seaborn库,可以直接用原df1绘制,无需提前转透视表:
import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(10, 6)) # 直接指定x、y、分组字段hue即可 sns.barplot(data=df1, x='day', y='times', hue='usertype') # 自定义图表样式 plt.xlabel('工作日') plt.ylabel('出现次数') plt.title('不同用户类型的工作日次数分布') plt.legend(title='用户类型') plt.show()
可选优化
如果你的day字段是0-6的数字编号,可以通过映射替换为中文星期名,提升图表可读性:
weekday_map = {0: '周一', 1: '周二', 2: '周三', 3: '周四', 4: '周五', 5: '周六', 6: '周日'} df1['day'] = df1['day'].map(weekday_map)
内容的提问来源于stack exchange,提问作者Ankur
相关产品推荐
相关产品推荐

