如何组合表中的行以便忽略重复的字段?

问题描述 投票:0回答:1

我们的人力资源数据库列出了每位员工的个人任务。员工可以有多项任务(即在多个部门或地点工作)或多个角色(并发临时合同和临时合同),并且数据库每天更新。在任何给定时间,一名员工可以有多个条目;其中一些会重复,有些会有细微差别。

我已经丢弃了重复的条目,唯一不同的是 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 的学校。

python pandas database merge
1个回答
0
投票

首先根据

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
© www.soinside.com 2019 - 2024. All rights reserved.