首页 > 解决方案 > 查看客户是否在每个季度都有购买,然后绘制图表

问题描述

我有一个看起来像这样的数据框:

 customer_id|date      |sales_amount
 479485     |20190120  | 500         
 479485     |20180320  | 200           
 472848     |20191020  | 100         

该数据包含 2016-2019 年的交易信息。对于每个业务季度(按 3 个月分组),我想查看一个独特的客户是否进行了交易。基本上,我希望表格的 y 轴是每个唯一的 customer_id,然后表格的 x 轴是数据时间段内的 12 个季度,并带有一个布尔值,表示客户是否有交易四分之一。

最终,我想可视化这些数据,以查看每个季度在所有独特客户中的交易分布。

期望输出:

 customer_id|2017- Q1  |2017- Q2|.. |2019- Q4
 479485     |20190120  |   0    |.. |   1 
 469488     |20180320  |   0    |.. |   0  
 452848     |20191020  |   1    |.. |   1 

我已将日期列更改为日期时间,但不确定如何分组并继续下一步。

标签: pandaspandas-groupby

解决方案


解决方案:

df.groupby([df['customer_id'], df['date'].apply(lambda _: pd.Period(_, 'Q'))])['sales_amount'].count().unstack().fillna(0)

输出:

       date 2017Q1  2018Q1  2019Q1  2019Q4
customer_id             
469471      1.0     0.0     0.0     0.0
469488      0.0     1.0     1.0     1.0
472848      0.0     0.0     0.0     1.0
479485      1.0     1.0     1.0     0.0

笔记

  • 假设:(1)所有年份季度都出现在您的数据集中,(2)每个季度只有一次交易。
  • 为了绕过(1),将索引设置为date,并重新索引缺少日期,用零值填充 nans。上述输出基于虚拟数据样本,因此仅显示了四个季度。
  • 要绕过 (2),请检查np.sign(_)您的输出。

推荐阅读