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

如何在Pandas分组聚合时仅计算一次组均值以优化性能?

解决方案

核心思路

先一次性计算每组的均值并映射到原数据的每一行,再基于该均值列完成统计,彻底避免重复计算组均值。

代码实现

首先定义原始DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[1,2,np.nan,3,4,5,3], 'b':[11,22,22,11,22,22,22]})

步骤1:计算每组均值并广播到每一行

使用groupby.transform方法,每组均值仅计算一次,结果会自动匹配原DataFrame的行索引,对应到组内每一行:

df['group_mean'] = df.groupby('b')['a'].transform('mean')

步骤2:统计符合条件的元素数量

过滤掉a列的空值后,通过布尔索引筛选出a < 组均值的行,再按b分组统计数量:

# 简洁版:布尔索引 + groupby.size()
result = df[df['a'].notna() & (df['a'] < df['group_mean'])].groupby('b').size()

# 可读性版:过滤后用apply统计
result = df[df['a'].notna()].groupby('b').apply(lambda x: (x['a'] < x['group_mean']).sum())

输出结果

执行后result的输出为:

b
11    1
22    2
dtype: int64

效率优势

相比直接在agg中重复计算组均值的方案,transform确保每组均值只计算一次,后续的比较和统计都基于预计算好的均值列,避免了组内每行重复计算均值的冗余操作,数据量越大,性能提升越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:15:36