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
相关产品推荐
相关产品推荐

