讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 Pandas 中按员工聚合多条任职记录并智能合并部门与 FTE 信息

雨浩姑娘_3410

雨浩姑娘_3410

发布时间:2026-09-02 18:51:53

|

145人浏览过

|

来源于php中文网

原创

如何在 Pandas 中按员工聚合多条任职记录并智能合并部门与 FTE 信息

本文介绍如何使用 pandas 对 hr 系统中同一员工的多条任职记录进行去重聚合:以最高 fte 的记录为主干,同时将所有部门按 fte 降序拼接为描述字段,并支持带权重标注(如“school 2(0.5330 fte)”)。

本文介绍如何使用 pandas 对 hr 系统中同一员工的多条任职记录进行去重聚合:以最高 fte 的记录为主干,同时将所有部门按 fte 降序拼接为描述字段,并支持带权重标注(如“school 2(0.5330 fte)”)。

在人力资源数据分析中,员工常存在多角色、跨部门、多合同类型(如 CONPTEPT)并发的复杂任职情况。原始数据库每日更新,导致同一 Employee# 对应多行记录——这些记录在关键业务字段(如 DepartmentFTEEnding)上存在差异,无法简单用 drop_duplicates() 处理。目标是:对每位员工生成一条聚合记录,其中:

  • 主部门(Department)取其所有任职中 FTE 最高的那条;
  • 所有部门按 FTE 从高到低排序,拼接为 Description 字段;
  • 支持扩展格式(如含 FTE 数值的可读描述);
  • 其他字段(如 TitleTypeStartingEnding)需合理选取代表值(通常取最高 FTE 行对应值,或按业务逻辑指定)。

✅ 核心实现步骤(Pandas)

首先确保数据已清洗完毕(如已剔除仅 EntryIDChangeDate 不同的纯重复项),然后执行以下操作:

import pandas as pd

# 示例数据(注意:列名需与实际一致,此处使用问题中字段)
df = pd.DataFrame({
    'EmployeeEntryID': [1420, 1420, 5540],
    'ChangeDate': ['20241122', '20241122', '20241202'],
    'Employee#': [1234, 1234, 1234],
    'Firstname': ['Tom', 'Tom', 'Tom'],
    'Lastname': ['Jones', 'Jones', 'Jones'],
    'Type': ['CONP', 'TEPT', 'TEPT'],
    'Title': ['TEACHER', 'TEACHER', 'TEACHER'],
    'Department': ['School 2', 'School 3', 'School 1'],
    'Starting': ['20240826', '20240826', '20240826'],
    'Ending': ['99999999', '20250630', '20250630'],
    'FTE': [0.5330, 0.1000, 0.1801]
})

# 步骤 1:按 Employee# 分组前,先按 FTE 降序排序(确保 highest FTE 排第一)
df_sorted = df.sort_values(['Employee#', 'FTE'], ascending=[True, False])

# 步骤 2:分组聚合 —— 关键在于区分「主字段」和「描述字段」
agg_dict = {
    'Firstname': 'first',
    'Lastname': 'first',
    'Type': 'first',           # 取最高 FTE 行的 Type(若需保留全部,见下方扩展)
    'Title': 'first',
    'Starting': 'first',       # 注意:Starting 未必相同,此处按业务取首行;如需 earliest,用 'min'
    'Ending': lambda x: str(x.max()),  # 取最大 Ending(如 99999999 表示永久),或按需处理
    'FTE': 'first',            # 最高 FTE 值
}

# 步骤 3:构造 Description 字段(含 FTE 标注,推荐格式)
df_sorted['DeptWithFTE'] = df_sorted['Department'] + '(' + df_sorted['FTE'].round(4).astype(str) + ' FTE)'
description_series = df_sorted.groupby('Employee#')['DeptWithFTE'].apply(', '.join)

# 步骤 4:主聚合 + 注入 Description 和主 Department
result = (df_sorted
          .groupby('Employee#')
          .agg(agg_dict)
          .assign(
              Description=description_series,
              Department=df_sorted.groupby('Employee#')['Department'].first()
          )
          .reset_index())

print(result[['Employee#', 'Firstname', 'Lastname', 'Type', 'Title', 
               'Department', 'Description', 'Starting', 'Ending', 'FTE']])

输出结果: | Employee# | Firstname | Lastname | Type | Title | Department | Description | Starting | Ending | FTE | |-----------|-----------|----------|------|---------|------------|--------------------------------------------------|----------|----------|--------| | 1234 | Tom | Jones | CONP | TEACHER | School 2 | School 2(0.533 FTE), School 1(0.1801 FTE), School 3(0.1 FTE) | 20240826 | 99999999 | 0.5330 |

⚠️ 注意事项与最佳实践

  • 字段一致性判断TypeTitle 等字段若在同员工多记录中存在实质差异(如一人同时是 TEACHERADMIN),不应盲目取 'first',而应改用 lambda x: ', '.join(set(x)) 或交由业务方确认主职;
  • 日期字段处理Starting 建议取 min()(最早入职时间),Ending 建议取 max()(最晚终止时间),而非固定 'first'
  • 避免列名冲突:原答案中两次对 'Department' 赋值会导致覆盖(Pandas 中字典 key 不可重复),务必拆分为独立赋值(如先聚合 Description,再单独 .assign(Department=...));
  • 性能优化:大数据量时,先 sort_values(..., inplace=True) 并设置 ignore_index=True 可提升 groupby 效率;
  • 空值安全:添加 .fillna('') 到字符串拼接前,防止 NaN 导致整个 DescriptionNaN

通过该方法,你不仅能完成基础聚合,还可灵活扩展为带权重、多维度、业务语义清晰的员工任职快照,完美适配夜间 ETL 更新场景。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

280

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

212

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

271

2026.04.13

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

0

2026.09.22

Conan二进制包配置指南
Conan二进制包配置指南

本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

0

2026.09.22

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

0

2026.09.22

loomy官网入口地址合集
loomy官网入口地址合集

本专题汇总了 Loomy 桌面 AI 助理的官方入口地址合集及使用指南。提供 macOS 与 Windows 客户端下载 。Loomy 是讯飞推出的桌面级 AI 工作搭子,支持文件整理、数据分析、网页操作及通过飞书/钉钉远程操控电脑,助你高效完成本地办公任务 。

0

2026.09.22

NumPy常见函数使用方法
NumPy常见函数使用方法

本专题整理 NumPy 常见函数使用方法相关教程,覆盖函数大全、参数用法、数组运算、统计聚合、排序处理、where 条件筛选、linspace 创建数列等常用场景,帮助读者快速掌握 NumPy 函数调用思路和实际数据处理技巧。

0

2026.09.22

NumPy性能优化版本更新与常见报错排查
NumPy性能优化版本更新与常见报错排查

本专题整理 NumPy 性能优化、版本更新与常见报错排查相关教程,覆盖向量化计算、广播性能、内存布局、NumPy 2.0 升级、版本兼容冲突、安装导入报错、dtype 溢出、矩阵运算异常和 broadcasting 报错修复,帮助读者系统掌握 NumPy 性能调优与问题定位方法。

20

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn