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

多Series场景下Pandas groupby.size、value_counts与Counter性能对比

多Series组合值计数的性能对比与核心疑问

日常处理数据时,大家聊得比较多的都是单Series里的值计数,但针对两个及以上Series组合值计数的最优实现,相关的深入讨论其实并不多。我最近做了一组基准测试,对比了三种常见的方法,这里跟大家分享下测试结果和几个一直没搞明白的核心疑问:

测试的三种组合值计数方法

  • grouper方法:df.groupby(['A','B'], sort=False).size()
  • value_counter方法:pd.Series(list(zip(df.A, df.B))).value_counts(sort=False)
  • count方法:Counter(zip(df.A.values, df.B.values))

两个核心疑问

  1. 为何grouper比count更高效?
    虽然Counter是基于C实现的,但测试发现,哪怕组合的列数从2增加到4,grouper方法依然稳稳保持着性能优势,这背后的底层逻辑是什么?

  2. value_counter性能远低于grouper的原因是什么?
    是不是因为list(zip(df.A, df.B))构造列表的过程开销太大?还是把列表转成Series时带来了额外的性能损耗?

另外要提一句,这三种方法的输出形式并不相同——比如基于numpy数组的过滤操作会比字典推导更高效,但本文的重点主要放在构建Series格式结果与字典格式结果的性能差异上,其他输出形式的性能暂不展开讨论。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:33:47