Python做多维度分类的聚合运算、环比、同比

本文介绍了如何使用Python进行多维度分类数据的聚合运算,包括用户数、销量和销售额的求和,以及计算每个分类的环比和同比。通过分析一家自行车公司的销售数据,展示了如何对时间、产品、地区、代理商和消费者维度进行处理,利用groupby、pivot_table、pct_change等函数进行计算,并给出了详细步骤和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.目标:

按月求三个重要指标:

  1. 用户数
  2. 销量
  3. 销售额

在每个维度的总和,或者每个分类的环比、同比。


2.背景:

一家国外品牌的自行车生产公司,在中国拥有三个代理商帮助销售其品牌产品,该品牌的自行在中国车十分畅销,在各个地区都有其用户。

该场景下的维度有:

  1. 时间维度
  2. 产品维度
  3. 地区维度
  4. 代理商维度
  5. 消费者维度

以月为单位就算,计算各维度中某分类的总和、同比、环比


3.观察数据:

Dataframe里每一行代表一位客人在某一天购买的一辆单车。

有83285条的订单记录,26列

df.shape
#(83285, 26)

df.info()
'''
<class 'pandas.core.frame.DataFrame'>
Int64Index: 83285 entries, 0 to 83342
Data columns (total 26 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   创建日期    83285 non-null  object 
 1   创建年月    83285 non-null  object 
 2   季度      83285 non-null  int64  
 3   一年的周数   83285 non-null  int64  
 4   星期      83285 non-null  int64  
 5   当月的天数   83285 non-null  int64  
 6   两年的周数   83285 non-null  int64  
 7   是否今天    83285 non-null  int64  
 8   订单ID    83285 non-null  float64
 9   客户ID    83285 non-null  int64  
 10  商品ID    83285 non-null  object 
 11  商品名     83285 non-null  object 
 12  商品子类    83285 non-null  object 
 13  商品类别    83285 non-null  object 
 14  价格      83285 non-null  float64
 15  客户创建日期  83285 non-null  object 
 16  出生日期    83285 non-null  object 
 17  性别      83285 non-null  object 
 18  婚否      83285 non-null  object 
 19  年收入     83285 non-null  float64
 20  省       83285 non-null  object 
 21  市       83285 non-null  object 
 22  地区      83285 non-null  object 
 23  代理商     83285 non-null  object 
 24  成本      83285 non-null  float64
 25  渠道      83285 non-null  object 
dtypes: float64(4), int64(7), object(15)
memory usage: 17.2+ MB
'''

时间是从2019年1月2日到2020年9月30日

df['创建日期'].value_counts().sort_index()
'''
2019-01-02     85
2019-01-03    104
2019-01-04     98
2019-01-05    101
2019-01-06     84
             ... 
2020-09-26    283
2020-09-27    293
2020-09-28    303
2020-09-29    317
2020-09-30    313
Name: 创建日期, Length: 633, dtype: int64
'''

4.计算步骤、思路

聚合后每个分类的三个指标的总和:

  1. 用groupby对[创建年月,分类字段]进行聚合
  2. 对客户数,求客户ID唯一值的数量
  3. 对销量,对订单ID用count求出销量
  4. 对销售额,对价格(单价)用sum求和

环比:

  1. 用pivot_table()计算每个月每个分类的各指标
  2. 用pct_change()计算环比
  3. 用stack()/reset_index()对多层列/行引索进行处理
  4. 用rename()重命名字段名

同比:

  1. 算分类的唯一值
  2. 对分类分层用for loop,再用pct_change()计算同比

5.多维度分类的聚合运算

以产品维度为例,详细步骤如下:

先观察,查看有多少产品子类

#一共有三个自行车子类:
df['商品子类'].value_counts()

'''
df['商品子类'].value_counts()
公路自行车    44131
山地自行车    27266
旅游自行车    11888
Name: 商品子类, dtype: int64
'''

每个子类在每个月的销售表现

#算出了每个分类在每个月的总客户数、销量、销售额
product_category=df.groupby(["创建年月","商品子类"]).agg({
   "客户ID":pd.Series.nunique,"订单ID":"count","价格":"sum"}).reset_index()
product_category=product_category.rename(columns={
   "客户ID":"客户数","订单ID":"销量","价格":"销售额"})


在这里插入图片描述

计算环比
先到pivot_table()转化行列
pivot_table()跟Excel的透视表功能一致,能对所需字段进行求和、求平均等。注意values一定要是数值类型,否则不能计算。

pivot_table()官方链接

在这里插入图片描述
这里不需要计算,只需要行列转换。

categor
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值