python pandas为数据表的每一条数据标记其重复的次数

最近我的客服有了一个需求,需要统计2次、3次或4次以上顾客光顾的人次数。

先分析一下这个需求,如下是一张光顾的csv表格:

客户编号姓名性别商品总额联系电话
001小强10013656655665
002小霞12015233233333
001小强8915322222222
003小红9915533333333

当然真正的数据有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小强10013656655665001小强2
002小霞12015233233333002小霞1
001小强8915322222222001小强2
003小红9915533333333003小红1

第三步,现在要统计任何光顾客户的人次数就可能好办了,直接使用分组汇聚。

# 分组汇聚,现在可以做更多统计了。如果表中每个客户还有一列是地址。
# 那么我们就可以统计每个地区关顾2次以上的客户人次。

data_2t = data[data['关顾次数'] > 2]    # 筛选光顾2次以上的顾客
data_2t_1 = data_2t.groupby(['地址'])['关顾次数'].count()

总结一下,这个方法只是我在实际工作中找到的比较简洁的方法,当然还有很多方法,如果你有更好的方法,同学们相互学习学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟杜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值