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

Python/Pandas的groupby操作是否具备内置缓存机制?

Pandas多次调用groupby是否会重复执行分组?

直接说结论:第一种写法里的第二次、第三次groupby("id")会完整重复执行分组逻辑,Python没有原生机制缓存之前的分组结果,所以第一种写法的性能确实比第二种差。

具体原因

Pandas的groupby()方法每次调用都会生成全新的GroupBy对象,每次都要重新计算分组的核心映射关系——比如确定每个id对应的行索引集合、分组的边界位置等。而第二种写法把第一次groupby()生成的GroupBy对象存到变量df_groupby_id里,后续调用cumsum()时直接复用已经计算好的分组结构,完全避免了重复的分组计算开销。

两种写法对比

第一种写法(重复调用groupby):

def func(df):
  df["val1_cumsum"] = df.groupby("id")["val1"].cumsum()
  df["val2_cumsum"] = df.groupby("id")["val2"].cumsum()
  df["val3_cumsum"] = df.groupby("id")["val3"].cumsum()

第二种写法(缓存GroupBy对象):

def func(df):
  df_groupby_id = df.groupby("id")
  df["val1_cumsum"] = df_groupby_id["val1"].cumsum()
  df["val2_cumsum"] = df_groupby_id["val2"].cumsum()
  df["val3_cumsum"] = df_groupby_id["val3"].cumsum()

额外说明

如果是极小的数据集,这种性能差异可能微乎其微,但数据量越大(比如百万级以上行),重复分组带来的时间消耗会越来越明显,实际开发里更推荐第二种写法,提前缓存GroupBy对象来提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:38:13