Python pandas实现商品按日去重统计并生成指定结构数据表
正确实现商品销售日期统计的方案
需求核心:按COD_PRODUTO分组,先对每个商品的销售日期DATA去重(单日多次记录仅计1次),再生成包含以下字段的结果表:
COD_PRODUTO:商品编码DATA_01:该商品最早销售日期DATA_02:该商品最晚销售日期VENDAS_DIAS:该商品实际销售的天数(去重后的日期总数)
SQL 实现方案
核心逻辑
先通过CTE或子查询提取每个商品的唯一销售日期,再基于去重后的数据集分组聚合计算指标。
WITH vendas_datas_unicas AS ( SELECT DISTINCT COD_PRODUTO, DATA FROM sua_tabela_vendas -- 替换为你的原始表名 ) SELECT COD_PRODUTO, MIN(DATA) AS DATA_01, MAX(DATA) AS DATA_02, COUNT(DATA) AS VENDAS_DIAS FROM vendas_datas_unicas GROUP BY COD_PRODUTO ORDER BY COD_PRODUTO;
关键说明
DISTINCT COD_PRODUTO, DATA确保每个商品的同一天只保留一条记录,避免重复统计MIN(DATA)/MAX(DATA)直接取去重后的日期极值,COUNT(DATA)统计实际销售天数
Python Pandas 实现方案
核心逻辑
先对原始数据按商品编码+日期去重,再分组聚合计算对应指标。
import pandas as pd # 加载原始数据(替换为你的数据源路径/方式) df_vendas = pd.read_csv('vendas_original.csv') # 步骤1:去除重复的商品-日期组合 df_datas_unicas = df_vendas.drop_duplicates(subset=['COD_PRODUTO', 'DATA']) # 步骤2:分组计算指标 df_resultado = df_datas_unicas.groupby('COD_PRODUTO').agg( DATA_01=('DATA', 'min'), DATA_02=('DATA', 'max'), VENDAS_DIAS=('DATA', 'count') ).reset_index() # 输出或保存结果 df_resultado.to_csv('vendas_estatisticas.csv', index=False)
关键说明
drop_duplicates(subset=['COD_PRODUTO', 'DATA'])精准去除单日多次销售的重复记录agg方法一次性定义三个指标的计算规则,简洁高效
常见错误排查
如果之前的agrupa_e_conta_vendas函数未达成目标,大概率是以下原因:
- 未先对日期去重就直接分组聚合,导致
VENDAS_DIAS统计的是销售记录数而非实际天数 - 分组时未正确锁定
COD_PRODUTO作为唯一分组键 - 日期字段格式异常(如字符串格式未转成日期类型),导致
min/max计算错误
内容的提问来源于stack exchange,提问作者Renato Paes
相关产品推荐
相关产品推荐

