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

如何优化处理超大规模数据集的Python用户通话量统计代码?

大规模数据集user_id通话总量统计效率优化方案

现有代码的核心问题

你的代码存在几个严重拉低效率的问题:

  • 把DataFrame转成字典df_dict = smallerData1.to_dict('records')完全没必要,徒增内存开销和遍历成本
  • 用列表looked_through_ids判断id是否已处理,列表的in操作是O(n)复杂度,数据量大时速度极慢
  • 对每个id重新执行(smallerData1.user_id == caller_id).sum(),相当于对整个数据集重复遍历,时间复杂度直接飙升到O(n²)

优化方案(分单数据集和多数据集场景)

单数据集处理(比如单个500万行的smallerData)

直接用pandas内置的聚合函数,这是最高效的方式:

# 单个数据集统计user_id的通话次数
call_counts = smallerData1['user_id'].value_counts()
# 转成字典(如果需要的话)
all_ids_dict = call_counts.to_dict()

或者用groupby实现相同效果:

call_counts = smallerData1.groupby('user_id').size()
all_ids_dict = call_counts.to_dict()

多数据集批量处理

因为你拆分了多个小数据集,只需逐个统计后合并结果:

from collections import defaultdict

all_ids_dict = defaultdict(int)

# 假设所有小数据集存在列表smaller_datasets中,比如[smallerData1, smallerData2, ...]
for df in smaller_datasets:
    # 统计当前数据集的user_id通话次数
    temp_counts = df['user_id'].value_counts()
    # 合并到全局统计字典
    for user_id, count in temp_counts.items():
        all_ids_dict[user_id] += count

额外优化建议

  • 不要在Jupyter Notebook里一次性加载所有数据集,处理完一个就释放内存(比如del df后执行gc.collect())
  • 如果原始数据集是csv等格式,建议用pandas.read_csv的chunksize参数分块读取,无需提前手动拆分数据集
  • 若数据量达到5000万行的超大级别,可以考虑用Dask替代pandas,它能自动处理分块并行计算,进一步提升效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:05:27