You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Pandas解决方案:计算用户一周内重复浏览元素的占比

计算用户一周内重复浏览元素的占比(Pandas实现)

原始数据

| id       | element  | dt       |
| -------- | -------- | -------- |
| 1        | a        | 22/04/22 |
| 2        | a        | 22/04/22 |
| 1        | b        | 27/04/22 |
| 1        | a        | 23/04/22 |
| 3        | b        | 22/04/22 |
| 1        | a        | 22/04/22 |
| 1        | a        | 22/04/22 |
| 3        | b        | 23/04/22 |
| 3        | b        | 25/04/22 |
| 1        | a        | 27/04/22 |
| 1        | c        | 26/04/22 |
| 1        | d        | 26/04/22 |
| 1        | g        | 25/04/22 |
| 1        | b        | 27/04/22 |

需求与示例结果

需要计算每个用户(id)一周内重复浏览元素的占比,规则为:

  • 同一日期内对同一元素的多次浏览,仅算1次有效访问
  • 重复浏览统计:同一用户对同一元素在不同日期的访问次数,全部计入重复次数(如示例中id=1的元素a在3个不同日期访问,即计3次重复)
  • 占比公式:重复次数总和 / 该用户的总浏览次数

示例结果:

| id       | percentage |
| -------- | ---------  |
| 1        | 0.3        |
| 2        | 0.0        |
| 3        | 1          |

Pandas实现步骤

1. 导入库并构造数据

import pandas as pd

# 构造原始数据表
data = {
    'id': [1,2,1,1,3,1,1,3,3,1,1,1,1,1],
    'element': ['a','a','b','a','b','a','a','b','b','a','c','d','g','b'],
    'dt': ['22/04/22','22/04/22','27/04/22','23/04/22','22/04/22','22/04/22','22/04/22','23/04/22','25/04/22','27/04/22','26/04/22','26/04/22','25/04/22','27/04/22']
}
df = pd.DataFrame(data)

2. 数据预处理(日期格式转换)

将dt列转为日期格式,方便后续日期相关的筛选或计算(若需限定一周范围可在此基础上添加筛选逻辑):

df['dt'] = pd.to_datetime(df['dt'], format='%d/%m/%y')

3. 计算总浏览次数

统计每个用户的原始浏览记录总数:

total_views = df.groupby('id').size().reset_index(name='total')

4. 去重处理

去除同一用户-元素-日期的重复记录,保留每日对每个元素的首次访问:

df_unique = df.drop_duplicates(subset=['id', 'element', 'dt'])

5. 统计元素重复访问次数

对去重后的数据,统计每个用户对各元素的跨日期访问次数,并筛选出访问次数>1的元素,求和得到总重复次数:

# 统计每个用户-元素的跨日期访问次数
element_counts = df_unique.groupby(['id', 'element']).size().reset_index(name='unique_count')

# 计算每个用户的重复浏览次数总和
repeat_counts = element_counts[element_counts['unique_count'] > 1].groupby('id')['unique_count'].sum().reset_index(name='repeat')

6. 计算占比并整理结果

合并总浏览次数和重复次数数据,填充无重复浏览的用户的重复次数为0,最后计算占比:

# 合并数据并填充缺失值
result = pd.merge(total_views, repeat_counts, on='id', how='left').fillna(0)

# 计算占比
result['percentage'] = result['repeat'] / result['total']

# 整理输出结果
result = result[['id', 'percentage']].sort_values('id').reset_index(drop=True)
print(result)

运行上述代码后,输出结果与示例完全一致:

id  percentage
0   1         0.3
1   2         0.0
2   3         1.0

内容的提问来源于stack exchange,提问作者hurricane133

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:55:17