最近我的客服有了一个需求,需要统计2次、3次或4次以上顾客光顾的人次数。
先分析一下这个需求,如下是一张光顾的csv表格:
客户编号 | 姓名 | 性别 | 商品总额 | 联系电话 |
001 | 小强 | 男 | 100 | 13656655665 |
002 | 小霞 | 女 | 120 | 15233233333 |
001 | 小强 | 男 | 89 | 15322222222 |
003 | 小红 | 女 | 99 | 15533333333 |
当然真正的数据有10万条以上,先来谈谈思路。
- 第一步,我们需要统计每一位客户光顾的次数。
- 第二步,新建一列,将每位客户光顾的次数写到这一列的数据中。
- 第三部,通过分组汇聚统计各种光顾次数的客户数。
首先开展第一步,将数据导入。统计每一位客户光顾次数
# 导入pandas库
import pandas as pd
# 导入数据
data = pd.read_csv(rf'文件目录\客户光顾表.csv')
我们可以使用分组汇聚计算每一位客户光顾的次数,但是如果使用名字有可能遇到同名的情况,这里假设客户编号是与每位客户绑定的,有时我们会遇到无法用单列数据来确定客户身份,这个使用可以使用多列数据组合的方式来确定身份(新建一列身份数据 data['客户身份'] = data['客户编号'] + data['姓名'])。
# 为了避免姓名同名同姓,使用增加多列组合为一列来确定身份信息。
data['客户身份'] = data['客户编号'] + data['姓名']
# 现在我们可以通过分组汇聚来计算每一位客户的光顾次数。
data_t = data.groupby(['客户身份'])['姓名'].count()
# 为了得到一个统计表,把这个分组数据表重置索引
data_t = data_t.reset_index()
data_t.rename(columns={'姓名':'关顾次数'},inplace=True) # 将姓名列修改为关顾次数
第二步,以上我们已经得到了一张统计光顾次数的表格。
客户身份 | 关顾次数 |
001小强 | 2 |
002小霞 | 1 |
003小红 | 1 |
我们要把这张表的次数写入到客户光顾表中,很简单,使用merge()函数就可以了。
# 将光顾次数表的关顾次数写入到客户表中
data = pd.merge(data,data_t,on='客户身份',how='left')
这样我们就得到了如下表:
客户编号 | 姓名 | 性别 | 商品总额 | 联系电话 | 客户身份 | 关顾次数 |
001 | 小强 | 男 | 100 | 13656655665 | 001小强 | 2 |
002 | 小霞 | 女 | 120 | 15233233333 | 002小霞 | 1 |
001 | 小强 | 男 | 89 | 15322222222 | 001小强 | 2 |
003 | 小红 | 女 | 99 | 15533333333 | 003小红 | 1 |
第三步,现在要统计任何光顾客户的人次数就可能好办了,直接使用分组汇聚。
# 分组汇聚,现在可以做更多统计了。如果表中每个客户还有一列是地址。
# 那么我们就可以统计每个地区关顾2次以上的客户人次。
data_2t = data[data['关顾次数'] > 2] # 筛选光顾2次以上的顾客
data_2t_1 = data_2t.groupby(['地址'])['关顾次数'].count()
总结一下,这个方法只是我在实际工作中找到的比较简洁的方法,当然还有很多方法,如果你有更好的方法,同学们相互学习学习。