按员工统计项目经理变更次数的实现需求
按员工统计项目经理变更次数
原始数据
| 项目经理 | 项目编号 | 员工 |
|---|---|---|
| A | 1 | 1 |
| A | 2 | 1 |
| B | 3 | 1 |
| A | 4 | 1 |
| B | 5 | 1 |
| B | 6 | 1 |
| A | 7 | 1 |
| A | 8 | 1 |
| B | 9 | 1 |
| A | 1 | 2 |
| B | 2 | 2 |
| B | 3 | 2 |
| A | 4 | 2 |
| A | 5 | 2 |
| B | 6 | 2 |
| A | 7 | 2 |
期望结果
| 项目经理变更次数 | 员工 |
|---|---|
| 5 | 1 |
| 4 | 2 |
需求说明
按员工维度统计其经历的项目经理变更次数,无需考虑项目的数量。
实现方案
方案1:SQL实现
利用窗口函数LAG获取同一员工上一个项目的项目经理,对比当前项目经理是否不同,最后汇总计数:
SELECT SUM(CASE WHEN current_pm != previous_pm THEN 1 ELSE 0 END) AS 项目经理变更次数, 员工 FROM ( SELECT `Project Manager` AS current_pm, LAG(`Project Manager`) OVER (PARTITION BY `Employee` ORDER BY `Project Num`) AS previous_pm, `Employee` AS 员工 FROM 你的表名 ) AS sub GROUP BY 员工;
方案2:Python Pandas实现
通过分组移位对比项目经理的变化,再统计次数:
import pandas as pd # 构造数据(实际场景可从文件/数据库读取) data = { '项目经理': ['A','A','B','A','B','B','A','A','B','A','B','B','A','A','B','A'], '项目编号': [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7], '员工': [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2] } df = pd.DataFrame(data) # 标记项目经理变更 df['上一项目经理'] = df.groupby('员工')['项目经理'].shift(1) df['是否变更'] = df['项目经理'] != df['上一项目经理'] # 统计每个员工的变更次数 result = df.groupby('员工')['是否变更'].sum().reset_index() result.columns = ['员工', '项目经理变更次数'] # 调整列顺序匹配期望结果 result = result[['项目经理变更次数', '员工']] print(result)
内容的提问来源于stack exchange,提问作者Gines
相关产品推荐
相关产品推荐

