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

如何在Pandas中筛选出薪资高于所在部门平均薪资的员工记录

报错原因

你的推测是正确的,groupby.filter的设计逻辑是判断整个分组是否需要保留,要求传入的回调函数返回单个布尔值,你在lambda里返回了和整个原表长度一致的布尔序列,同时还调用了全局的df['salary'],和当前分组的维度不匹配,因此触发类型错误。

正确实现方案

最贴合你SQL查询逻辑的写法是使用transform实现分组聚合结果的行级广播:

# 计算每个部门的平均薪资,结果会映射回原表的每一行
dept_avg = df.groupby('Department')['Salary'].transform('mean')
# 用布尔索引筛选符合条件的员工,取需要的字段
res = df[df['Salary'] > dept_avg][['Name', 'Department', 'Salary']]

如果想要用分组处理的写法,也可以用groupby.apply实现:

res = df.groupby('Department', group_keys=False).apply(
    lambda group: group[group['Salary'] > group['Salary'].mean()]
)[['Name', 'Department', 'Salary']]

两种写法的执行结果完全一致,和你给出的SQL语句逻辑等价。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:01