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

如何使用Pandas找出各项目中营收最高的员工(展示姓名及营收)

用Pandas找出每个项目营收最高员工的实现方案

嘿,这个需求在Pandas里有好几种实用的实现方式,我给你整理几个常用方案,附代码和详细解释,你可以根据自己的场景选择:

第一步:构造示例数据集

首先我们把你提供的数据转换成Pandas DataFrame:

import pandas as pd

# 构造你的示例数据
data = {
    'Rev': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
    'Project': ['dave', 'Ron', 'Lily', 'Maya', 'Jon', 'Alex', 'Allen', 'Ji', 'Shan'],
    'Emp': [5000, 21000, 12000, 15000, 34000, 31000, 18000, 10000, 28000]
}
df = pd.DataFrame(data)

方法1:groupby + idxmax(最直接高效)

这个方法是最常用的,核心思路是按项目(Rev)分组,找到每组中营收(Emp)最大值对应的行索引,再提取这些行:

# 找到每个Rev组内Emp最大值的行索引,提取对应行
max_emp_per_rev = df.loc[df.groupby('Rev')['Emp'].idxmax()]
# 可选:调整列顺序让结果更贴合需求
max_emp_per_rev = max_emp_per_rev[['Rev', 'Project', 'Emp']]
print(max_emp_per_rev)

解释:df.groupby('Rev')['Emp'].idxmax()会返回每个Rev分组里Emp值最大的那一行的索引,再通过loc定位这些行,就能直接得到目标结果。

方法2:排序后去重(直观易懂)

先按项目分组,再按营收降序排序,最后保留每个项目的第一条记录:

# 按Rev升序、Emp降序排序,保留每个Rev的第一条数据
max_emp_per_rev = df.sort_values(['Rev', 'Emp'], ascending=[True, False]).drop_duplicates('Rev')
# 可选:重置索引让结果更整洁
max_emp_per_rev = max_emp_per_rev[['Rev', 'Project', 'Emp']].reset_index(drop=True)
print(max_emp_per_rev)

解释:排序后每个Rev分组的第一行就是营收最高的员工,drop_duplicates('Rev')会自动保留每个Rev的第一条记录,实现筛选目的。

方法3:transform标记筛选(支持多最大值场景)

如果某个项目有多个员工营收相同且都是最大值,这个方法会把所有符合条件的记录都保留下来:

# 给每行标记是否是所在Rev组的Emp最大值
df['is_max'] = df.groupby('Rev')['Emp'].transform(lambda x: x == x.max())
# 筛选出标记为True的行,去掉辅助列
max_emp_per_rev = df[df['is_max']].drop('is_max', axis=1)
print(max_emp_per_rev)

解释:transform会对每个分组的所有行执行判断,标记该行是否为分组内的最大值,之后筛选标记为True的行即可。

最终输出示例

不管用哪种方法,最终输出结果都会是:

Rev Project    Emp
1   A     Ron  21000
4   B     Jon  34000
8   C    Shan  28000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 22:02:33