如何用Pandas按商品分组统计月度销量次数并计算平均值?
解决Pandas按商品分组并将月份作为列统计销量次数的问题
步骤说明与代码实现
转换日期格式并提取月份全称
首先需要将原始字符串格式的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()透视表实现月份转列并统计销量次数
使用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 )添加每行平均值列
用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
相关产品推荐
相关产品推荐

