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

Pandas groupby apply执行速度过慢,如何优化现有分组聚合逻辑?

Pandas groupby apply 耗时过长优化方案

你的代码性能瓶颈来自自定义apply函数的额外开销:逐组调用Python层函数、反复生成pd.Series对象的成本远高于内置向量化操作,你当前的所有聚合逻辑都可以通过Pandas原生能力优化,性能通常可提升10~100倍。

核心优化方案:替换自定义apply为内置agg聚合+全局衍生计算

# 第一步:用agg批量完成组内聚合,所有运算在C层执行无额外开销
agg_result = xactions.groupby('user_wid').agg(
    user_name=('user_name', 'max'),
    user_age=('user_age', 'max'),
    user_gender=('user_gender', 'max'),
    last_visit_date=('sale_date', 'max'),
    days_since_first_visit=('days_since_first_visit', 'max'),
    num_visits_window=('visit', 'max'),
    num_visits_total=('num_user_visits', 'max'),
    products_used=('product', 'max'),
    user_total_sales=('sale_price', 'sum'),
    membership=('whether_member', 'max')
).reset_index()

# 第二步:全局向量化计算衍生列,避免组内逐组计算开销
agg_result['user_total_sales'] = agg_result['user_total_sales'].round(2)
agg_result['avg_spend_visit'] = (agg_result['user_total_sales'] / agg_result['num_visits_window']).round(2)

users = agg_result

补充优化建议

  • 提前转换数据类型:将sale_date列转换为datetime类型,max聚合速度远高于字符串比较,对应代码为xactions['sale_date'] = pd.to_datetime(xactions['sale_date'])
  • 数值列压缩:对取值范围小的数值列(如whether_member、visit)转换为更小的存储类型(如int8、int16),降低内存占用同时提升聚合速度
  • 超大数据集场景:如果数据量超过千万行,可以改用Polars框架实现相同逻辑,并行聚合效率比Pandas高5~10倍

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:54:02