我有两个数据集:一个是推荐输出,另一个是活动数据集,它提供了关于用户在过去2个月浏览过哪些活动或内容的信息。你知道吗
推荐数据示例
id content
1 100
1 101
2 102
2 103
3 103
4 105
用户活动数据示例
id content
1 34
5 23
2 102
2 103
3 103
6 100
我的目标是从用户的推荐数据集中删除这些内容,正如活动数据集中所描述的那样,用户在过去2个月内已经看到了这些内容。现在我获取这两个数据集之间的公共id,对于公共id,我为每个id提取两个数据的子集,并添加结尾,将不常见的id添加到输出中。你知道吗
目前的解决方案是可行的,但在大数据集方面效率极低。实际数据集有30000多个用户ID。如果有人能在列表理解或任何其他方法方面提供帮助,将不胜感激
common_muids = list(set(useractivity_ids).intersection(reco_ids))
final_rec1 = reco[reco.masteruserid.isin(common_muids)]
final_rec2 = reco[~(reco.masteruserid.isin(common_muids))]
d=DataFrame()
for i in common_muids:
final_rec_reduced=final_rec1[final_rec1.id==i]
useractivity_reduced=useractivity[useractivity.id==i]
useractivity_reduced_tbids=useractivity_reduced.tbid.unique().tolist()
final_rec_reduced=final_rec_reduced[~( final_rec_reduced.tbid.isin(useractivity_reduced_tbids))]
d=d.append(final_rec_reduced)
最后:
d=d.append(final_rec2)
最终输出为:
id tbid
1 100
1 101
4 105
假设有两个数据帧
以及
可以在两个数据帧之间进行左连接
然后只获取具有
null
值的行,这些值存在于推荐数据帧中,而不存在于用户活动数据帧中您可以在
useractivity_ids
中添加一个伪变量,然后使用pandasmerge
进行比较和筛选。你知道吗在pandas的下一个版本(0.17)中,
merge
有一个indicator
关键字,可以在不使用伪变量的情况下执行此操作。你知道吗相关问题 更多 >
编程相关推荐