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

Pandas按分组聚合过滤DataFrame:解决组内均值比较报错问题

解决分组均值筛选异常值的索引匹配问题

问题根源

直接用groupby(["Group", "Sub"]).mean()得到的是聚合后的小数据集,和原DataFrame的行结构、索引完全不匹配,所以直接比较会触发ValueError。

可行方案:用transform映射分组均值到原数据

transform方法能将分组计算的结果按原DataFrame的行结构返回,完美解决索引匹配问题,具体实现如下:

完整代码

import pandas as pd

df = pd.DataFrame({
    "Group": ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'],
    "Sub": ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],
    "Values": [1, 2, 3, 10, 20, 10, 25, 100, 75, 1500, 1600, 1800]
})

# 为每行添加对应分组的均值
df['group_mean'] = df.groupby(["Group", "Sub"])['Values'].transform('mean')

# 筛选Values大于组均值的行
filtered_df = df[df['Values'] > df['group_mean']]

print(filtered_df)

代码解释

  • transform('mean')会遍历每个Group-Sub分组,将该组的均值填充到原DataFrame中属于该组的每一行,生成的列和原数据长度完全一致。
  • 后续直接通过布尔索引筛选,不存在任何索引不匹配问题。

输出结果

Group Sub  Values  group_mean
3      A   A      10         5.5
4      A   B      20        11.0
5      A   C      10         6.5
9      B   A    1500       762.5
10     B   B    1600       850.0
11     B   C    1800       937.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:15:34