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

基于check-ins签到数据高效计算用户共同到访场馆数的实现方法

统计用户对共同到访场馆数量的高效实现方案

原有代码性能瓶颈

  • 第一层遍历场馆时反复对全量DataFrame做条件筛选,时间复杂度为O(场馆数*总签到数),数据量大时损耗极高
  • 第二层遍历用户对时又对全量组合DataFrame做全局模糊匹配,时间复杂度达到O(组合数²),是运行耗时上百小时的核心原因

优化实现方案

核心思路是利用pandas底层优化的关联和分组能力,完全避免Python层面的循环操作,代码整体只有3个核心步骤:

  1. 先对签到数据去重,同一个用户在同一场馆的多次签到只保留1条记录,避免重复计数
import pandas as pd
# 去重:同一用户同一场馆只保留一条记录
checkins_unique = checkins_2.drop_duplicates(subset=['user_id', 'venue_id'])
  1. 按场馆ID自连接得到同场馆的所有用户对,直接过滤掉自配对和反向重复配对
# 自连接获取同场馆的所有用户组合
merged_df = checkins_unique.merge(checkins_unique, on='venue_id', suffixes=('_u1', '_u2'))
# 过滤:仅保留u1_id < u2_id的组合,同时排除自己和自己配对的情况,避免(A,B)和(B,A)重复计数
merged_df = merged_df[merged_df['user_id_u1'] < merged_df['user_id_u2']]
  1. 按用户对分组统计共同到访的场馆数量
# 分组计数得到最终结果,venue_id的计数就是两个用户共同到访的场馆数
common_venue_count = merged_df.groupby(['user_id_u1', 'user_id_u2'], as_index=False).agg(共同到访场馆数=('venue_id', 'count'))

性能说明

该方案所有运算均走pandas底层C实现,同等数据量下运行效率是原有循环实现的千倍以上,万级签到记录的场景下通常几秒即可出结果。如果是千万级以上超大规模签到数据,可进一步配合Dask等分布式计算框架实现并行运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:45:10