如何用Python Pandas生成‘回访计数’及对应汇总表?
Pandas实现回访计数(count of revisit)的方法
一、生成count of revisit字段
根据回访计数的常见定义(第一次访问不计入回访,之后每次访问累计计数),可以用以下两种方式实现:
1. 累计回访次数(每行对应该次访问是第几次回访)
使用groupby() + cumcount(),cumcount()会对每组内的行按顺序从0开始编号,刚好对应回访计数(第一次访问为0,第二次为1,以此类推):
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'user_id': ['A', 'A', 'B', 'B', 'B', 'C'], 'visit_date': ['2024-01-01', '2024-01-05', '2024-01-02', '2024-01-06', '2024-01-10', '2024-01-03'] }) # 添加回访计数字段 df['count of revisit'] = df.groupby('user_id').cumcount()
处理后结果:
| user_id | visit_date | count of revisit |
|---|---|---|
| A | 2024-01-01 | 0 |
| A | 2024-01-05 | 1 |
| B | 2024-01-02 | 0 |
| B | 2024-01-06 | 1 |
| B | 2024-01-10 | 2 |
| C | 2024-01-03 | 0 |
2. 总回访次数(每行显示该用户的累计回访总数)
如果需要每行显示该用户的总回访次数(总访问次数-1),用groupby() + transform('count'):
df['count of revisit'] = df.groupby('user_id')['user_id'].transform('count') - 1
处理后结果:
| user_id | visit_date | count of revisit |
|---|---|---|
| A | 2024-01-01 | 1 |
| A | 2024-01-05 | 1 |
| B | 2024-01-02 | 2 |
| B | 2024-01-06 | 2 |
| B | 2024-01-10 | 2 |
| C | 2024-01-03 | 0 |
二、生成回访计数汇总表
如果需要按用户汇总总回访次数,可使用groupby() + size()或agg():
方法1:用size()生成汇总
revisit_summary = df.groupby('user_id').size().reset_index(name='total_visits') revisit_summary['count_of_revisit'] = revisit_summary['total_visits'] - 1
方法2:用agg()自定义聚合
revisit_summary = df.groupby('user_id').agg( total_visits=('user_id', 'count'), count_of_revisit=('user_id', lambda x: len(x)-1) ).reset_index()
汇总结果:
| user_id | total_visits | count_of_revisit |
|---|---|---|
| A | 2 | 1 |
| B | 3 | 2 |
| C | 1 | 0 |
核心Pandas函数说明
groupby():按指定字段(如user_id)分组,是所有分组统计的基础cumcount():对每组内的行顺序编号,从0开始,适合计算累计回访次数transform():将分组计算结果广播回原DataFrame的每一行,用于添加新字段size()/agg():用于生成汇总表,实现分组聚合统计
内容的提问来源于stack exchange,提问作者user13617491
相关产品推荐
相关产品推荐

