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

Python实现DataFrame唯一值对计数、小时热销品统计及可视化

销售数据统计与可视化实现方案

1. 各小时热销产品表生成

你目前通过res = reshaped.groupby(['Product', 'Hour']).size()得到的是多层索引的Series,索引为(Product, Hour),值为对应产品在对应小时的销量,后续按以下步骤处理即可得到按小时汇总的热销结果表:

  • 第一步:将分组计数结果转换为普通DataFrame,给计数列设置明确别名
import pandas as pd
# 重置索引,将销量计数转为普通列
count_df = res.reset_index(name='sales_count')
  • 第二步:按小时分组,提取每个小时下销量最高的产品记录
# 先按销量倒序排序,再按小时分组取每组第一条,即每个小时销量最高的记录
hour_top_product = count_df.sort_values('sales_count', ascending=False)\
    .groupby('Hour', as_index=False)\
    .first()
# 补全0-23点全小时维度,无销售的小时填充默认值
full_hour_range = pd.DataFrame({'Hour': range(24)})
hour_top_product = full_hour_range.merge(
    hour_top_product, on='Hour', how='left'
).fillna({'sales_count': 0, 'Product': '无有效销售'})

处理完成后,hour_top_product即为目标结果表,包含三列:Hour(0-23点自然小时)、Product(对应小时销量最高的产品ID)、sales_count(对应产品在该小时的销量)。

注:如果某小时存在多个产品销量并列第一的情况,上述代码默认取排序后第一条记录,可根据业务规则自定义筛选逻辑,比如优先取历史总销量更高的产品。

2. 指定小时销冠产品全时段销量可视化

实现逻辑为:先提取目标小时对应的销冠产品ID,再从全量产品小时销量表中筛选该产品在0-23点的所有销量数据,通过柱状图展示分布即可,参考实现代码如下:

import matplotlib.pyplot as plt
# 中文环境下取消注释以下两行解决中文显示异常问题
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['axes.unicode_minus'] = False

def plot_top_prod_hourly_sales(target_hour, count_df, hour_top_product):
    # 获取目标小时的销冠产品ID
    top_prod_id = hour_top_product.query("Hour == @target_hour")['Product'].iloc[0]
    # 提取该产品全时段销量,补全0-23点缺失值
    prod_hourly_sales = count_df.query("Product == @top_prod_id")[['Hour', 'sales_count']]
    prod_hourly_sales = pd.DataFrame({'Hour': range(24)}).merge(
        prod_hourly_sales, on='Hour', how='left'
    ).fillna(0)
    
    # 绘制柱状图
    plt.figure(figsize=(12, 5))
    plt.bar(prod_hourly_sales['Hour'], prod_hourly_sales['sales_count'], color='#1f77b4')
    # 高亮标记目标小时的销量点
    target_sales = prod_hourly_sales.query("Hour == @target_hour")['sales_count'].iloc[0]
    plt.scatter(
        target_hour, target_sales, color='#d62728', s=150, zorder=6,
        label=f'{target_hour}点销冠:销量{int(target_sales)}'
    )

    plt.xticks(range(24))
    plt.xlabel('自然小时(0-23点)')
    plt.ylabel('产品销量')
    plt.title(f'{target_hour}点销冠产品【{top_prod_id}】全时段销量分布')
    plt.legend()
    plt.grid(axis='y', alpha=0.3)
    plt.show()

# 调用示例:查看20点销冠产品的全时段销量分布
plot_top_prod_hourly_sales(20, count_df, hour_top_product)

内容的提问来源于stack exchange,提问作者Armaan Kumar Srivastava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:30:54