我们的人力资源数据库列出了每位员工的个人任务。员工可以有多项任务(即在多个部门或地点工作)或多个角色(并发临时合同和临时合同),并且数据库每天更新。在任何给定时间,一名员工可以有多个条目;其中一些会重复,有些会有细微差别。
我已经丢弃了重复的条目,唯一不同的是 EntryID 和 ChangeDate,所以我只剩下这样的东西:
员工条目ID | 更改日期 | 员工# | 名字 | 姓氏 | 类型 | 标题 | 部门 | 开始 | 完结 | 全职工作 |
---|---|---|---|---|---|---|---|---|---|---|
1420 | 20241122 | 1234 | 汤姆 | 琼斯 | CONP | 老师 | 学校2 | 20240826 | 99999999 | 0.5330 |
1420 | 20241122 | 1234 | 汤姆 | 琼斯 | TEPT | 老师 | 学校3 | 20240826 | 20250630 | 0.1000 |
5540 | 20241202 | 1234 | 汤姆 | 琼斯 | TEPT | 老师 | 学校1 | 20240826 | 20250630 | 0.1801 |
我想要做的每晚更新将这三行合并为一行,其中员工被分配到 FTE 最高的学校,但所有学校都列在“描述”下(按 FTE 的顺序):
员工# | 名字 | 姓氏 | 类型 | 标题 | 部门 | 描述 | 开始 | 完结 | 全职工作 |
---|---|---|---|---|---|---|---|---|---|
1234 | 汤姆 | 琼斯 | CONP | 老师 | 学校2 | 学校2、学校1、学校3 | 20250106 | 99999999 | 0.5330 |
不幸的是,我发现的有关使用 Pandas 合并行的所有内容似乎都假设您正在处理数字,而不是字符串,所以我不知道如何开始。我尝试过以下方法:
df.sort_values(['Employee#','FTE'],ascending=True).groupby('Employee#')['Department'].agg(', '.join).reset_index()
它将按 FTE 的顺序列出学校(这对于描述字段来说很好),但我不知道如何在作业字段中隔离最高 FTE 的学校。
首先根据
FTE
对数据帧进行排序,然后您可以按 Employee
进行分组并获取按 first
排序的组中的 FTE
值。
df_sorted = df.sort_values(['FTE'], ascending=[ False])
result = df_sorted.groupby('Employee').agg({
'Firstname': 'first',
'Lastname': 'first',
'Type': 'first',
'Title': 'first',
'Department': 'first',
'Starting': 'first',
'Ending': 'first',
'FTE': 'first',
'Department': lambda x: ', '.join(x)
}).reset_index()
result = result.rename(columns={'Department': 'Description'})
输出
员工 | 名字 | 姓氏 | 类型 | 标题 | 描述 | 开始 | 完结 | 全职工作 |
---|---|---|---|---|---|---|---|---|
1234 | 汤姆 | 琼斯 | CONP | 老师 | 学校2、学校1、学校3 | 20240826 | 99999999 | 0.533 |