基于Pandas为客户访问表添加总访问次数与时间排序访问排名列
客户访问记录新增统计列解决方案
需求说明
现有客户访问记录表,需新增两列:
Total_Visits:记录每个客户的总访问次数Visit_Rank:按访问时间从早到晚排序的客户内部访问排名
示例数据
import pandas as pd df = pd.DataFrame([[1,'xx','2011-10-10'], [2,'xx','2010-10-10'], [3,'yy','2014-10-10'], [4,'yy','2013-10-10'], [5,'yy','2015-10-10'], [6,'zz','2009-10-10'] ], columns=['ID','Customer_ID','Visit_Date'])
预期结果
处理后的数据表如下:
| ID | Customer_ID | Visit_Date | Total_Visits | Visit_Rank |
|---|---|---|---|---|
| 1 | xx | 2011-10-10 | 2 | 2 |
| 2 | xx | 2010-10-10 | 2 | 1 |
| 3 | yy | 2014-10-10 | 3 | 2 |
| 4 | yy | 2013-10-10 | 3 | 1 |
| 5 | yy | 2015-10-10 | 3 | 3 |
| 6 | zz | 2009-10-10 | 1 | 1 |
实现代码
# 转换日期格式为datetime类型,确保排序准确 df['Visit_Date'] = pd.to_datetime(df['Visit_Date']) # 计算每个客户的总访问次数,映射到每一行 df['Total_Visits'] = df.groupby('Customer_ID')['Customer_ID'].transform('count') # 按客户分组,对访问时间升序排名,method='first'保证同日期时按原顺序排名 df['Visit_Rank'] = df.groupby('Customer_ID')['Visit_Date'].rank(method='first', ascending=True).astype(int)
代码说明
- 日期转换:将
Visit_Date转为datetime类型,避免字符串排序带来的逻辑错误; - 总访问次数:通过
groupby按客户分组后计数,transform方法确保每个客户的所有行都能同步获取总访问次数; - 访问排名:按客户分组后对访问时间升序排名,
method='first'处理可能的同日期场景,保证排名唯一且符合数据原始顺序,最后转为整数类型让结果更直观。
内容的提问来源于stack exchange,提问作者Natali
相关产品推荐
相关产品推荐

