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

如何对两个DataFrame高效执行join与groupby统计客户服务数量

性能优化方案

你原有方案耗时过高的核心原因是使用了逐行遍历逻辑,时间复杂度达到O(n*m)(n是ServicesA行数、m是ServicesB的客户数),大数据量下性能极差。使用pandas原生向量化操作即可把性能提升几个数量级,实现代码如下:

import pandas as pd

# 第一步:统计ServicesA中每个客户的服务数量
service_a_cnt = df_ServicesA.groupby('clientID', as_index=False)['ServiceID_A'].count()
# 统一列名方便后续关联
service_a_cnt.columns = ['ClientID', 'count(ServiceID_A)']

# 第二步:提取ServicesB中的唯一客户列表
service_b_clients = df_ServicesB[['ClientID']].drop_duplicates()
# 改名为期望的输出列名
service_b_clients.columns = ['ClientID With ServiceID_B']

# 第三步:左关联填充统计值,无匹配的客户填充0
result = service_b_clients.merge(
    service_a_cnt,
    left_on='ClientID With ServiceID_B',
    right_on='ClientID',
    how='left'
).drop(columns='ClientID')

# 空值补0并转为整数类型
result['count(ServiceID_A)'] = result['count(ServiceID_A)'].fillna(0).astype(int)

# 重置索引和预期输出格式一致
result = result.reset_index(drop=True)

方案说明

  • 所有操作均为pandas底层C实现的向量化运算,时间复杂度降至O(n + m),即使百万级数据量也可以在秒级完成运算
  • 无需自定义遍历函数,完全符合Python pandas生态的最佳实践
  • 最终输出的result结构和你期望的结果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:06:03