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

Python如何加速获取DataFrame中不存在于另一列的用户列表的操作

Pandas 跨表成员判断性能优化方案
  • 方案1:使用Pandas原生向量化操作(最优推荐)
    Pandas内置的isin()方法底层为C实现,完全规避Python级循环开销,10万级数据可毫秒级完成计算,代码示例:
# 直接得到非推荐人用户的唯一值数组,需要转集合可套set()
non_referees = whole_data[~whole_data['user_id'].isin(referrals['referee_id'])]['user_id'].unique()
  • 方案2:优化集合操作逻辑
    如果需要保留集合类型操作,不需要手动写列表推导做判断,直接使用Python集合内置的差集运算,底层同样为优化后的C实现,比手动循环快5~10倍:
users = set(whole_data['user_id'])
referees = set(referrals['referee_id'])
# 直接用集合差运算符,无需手动遍历判断
non_referees = users - referees
  • 方案3:使用Numpy运算进一步提速
    如果两列id均为数值类型,可调用Numpy的集合差方法,性能还能再提升:
import numpy as np
non_referees_arr = np.setdiff1d(whole_data['user_id'].values, referrals['referee_id'].values)
# 转集合可执行 non_referees = set(non_referees_arr)

原代码性能瓶颈出现在手动编写的列表推导环节:虽然set的成员判断时间复杂度为O(1),但Python层级的循环遍历本身存在极高的执行开销,10万次遍历的耗时会远高于底层C实现的批量运算。上述三种方案均规避了Python级循环,在你的数据量级下基本可以实现秒内返回结果。

内容的提问来源于stack exchange,提问作者Eugenio.Gastelum96

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:48:03