如何基于布尔条件为DataFrame补全用户未访问页面记录
Pandas补全用户未访问页面记录实现方案
你可以通过生成用户与页面的全量组合、关联原访问数据打标的方式实现需求,具体步骤和代码如下:
- 提取数据集中所有独立用户ID、所有独立页面ID,生成两者的笛卡尔积,得到「每个用户对应所有页面」的全量记录基础表
- 给原始访问数据集新增
visit字段,固定赋值为1,标记这些是已访问记录 - 用全量基础表左连接原始访问表,未匹配到关联记录的行就是用户未访问的页面,将这部分行的
visit空值填充为0即可
代码示例
首先构造初始测试数据集:
import pandas as pd # 初始访问数据 df = pd.DataFrame({ 'userID': [1, 1, 2], 'pageID': [1, 2, 1] })
核心处理逻辑:
# 生成用户+页面的全量组合 all_pairs = pd.MultiIndex.from_product( [df['userID'].unique(), df['pageID'].unique()], names=['userID', 'pageID'] ).to_frame(index=False) # 原始数据标记已访问 df['visit'] = 1 # 关联补全数据,填充未访问标记 final_df = all_pairs.merge( df, on=['userID', 'pageID'], how='left' ).fillna({'visit': 0}) # 字段类型转成整数,和预期格式一致 final_df['visit'] = final_df['visit'].astype(int)
执行后打印final_df即可得到目标结果:
userID pageID visit 0 1 1 1 1 1 2 1 2 2 1 1 3 2 2 0
说明:该逻辑默认基于现有数据中出现过的页面集合做补全,如果需要纳入未在访问记录里出现过的新页面,只要把对应pageID加入全量页面ID的列表即可,核心逻辑不需要调整。
内容的提问来源于stack exchange,提问作者psyvic
相关产品推荐
相关产品推荐

