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

如何用Pandas按商品分组统计月度销量次数并计算平均值?

解决Pandas按商品分组并将月份作为列统计销量次数的问题

步骤说明与代码实现

  1. 转换日期格式并提取月份全称
    首先需要将原始字符串格式的Date列转换为datetime类型,才能正确提取月份信息。注意你的日期格式是日-月-年,所以要指定dayfirst=True避免解析错误。

    import pandas as pd
    
    # 构造示例数据(模拟你的数据集)
    data = {
        'Date': ['01-01-2022', '05-01-2022', '10-02-2022', '15-02-2022', '20-01-2022', '25-02-2022'],
        'Item': ['iphone', 'iphone', 'iphone', 'macbook', 'macbook', 'macbook'],
        'Sales': ['$20', '$30', '$25', '$100', '$90', '$95']
    }
    df = pd.DataFrame(data)
    
    # 转换日期列并提取月份全称
    df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
    df['Month'] = df['Date'].dt.month_name()
    
  2. 透视表实现月份转列并统计销量次数
    使用pivot_table可以直接将Item作为行、Month作为列,同时统计每组的销量次数(用aggfunc='count'统计行数),fill_value=0填充无销量月份的空值。

    # 生成透视表
    result_df = pd.pivot_table(
        df,
        index='Item',
        columns='Month',
        values='Sales',
        aggfunc='count',
        fill_value=0
    )
    
  3. 添加每行平均值列
    用mean(axis=1)计算每行(每个商品)的月均销量次数,保留两位小数提升可读性。

    # 添加Average列
    result_df['Average'] = result_df.mean(axis=1).round(2)
    

最终输出

运行上述代码后,你会得到如下格式的结果:

Month    January  February  Average
Item                               
iphone         2         1      1.50
macbook        1         2      1.50

替代方案(groupby + unstack)

如果你更习惯用groupby,可以先分组统计,再用unstack将月份从行索引转为列:

# groupby分组后unstack
grouped = df.groupby(['Item', 'Month']).size().unstack(fill_value=0)
grouped['Average'] = grouped.mean(axis=1).round(2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:10:18