Python 使用逗号分隔值进行查找时筛选数据
我有以下数据框,表示员工编号、他们所在的部门以及他们在公司中的角色代码,可以是“1”或“2”。在“部门名称”列中,您可以选择员工所属的部门(命名约定为“XX:Dept Name”,其中XX是国家代码),或者在某些情况下,它显示为一组部门,以逗号分隔,并带有员工在这些部门中的角色。它看起来像这样:Python 使用逗号分隔值进行查找时筛选数据,python,pandas,lambda,filter,slice,Python,Pandas,Lambda,Filter,Slice,我有以下数据框,表示员工编号、他们所在的部门以及他们在公司中的角色代码,可以是“1”或“2”。在“部门名称”列中,您可以选择员工所属的部门(命名约定为“XX:Dept Name”,其中XX是国家代码),或者在某些情况下,它显示为一组部门,以逗号分隔,并带有员工在这些部门中的角色。它看起来像这样: Department Name Employee Number Role Code 0 AU:Dept1
Department Name Employee Number Role Code
0 AU:Dept1 1000 1
1 AU:Dept1, AU:Dept3 1000 2
2 AU:Dept7 1000 1
3 CZ:Dept3 1001 2
4 CZ:Dept4, CZ:Dept6, CZ:Dept7 1001 2
5 CZ:Dept4 1001 1
6 PL:Dept1 1002 2
7 PL:Dept2, PL:Dept1 1002 1
8 PL:Dept3 1002 2
9 SG:Dept1 1003 1
10 SG:Dept1 1003 2
11 SG:Dept2 1003 2
员工在每个唯一的部门名称中只能有角色1或角色2,因此我需要创建一个代码,该代码将返回所有冲突行,其中员工似乎在同一部门中同时有角色1和角色2。这就是输出:
Department Name Employee Number Role Code
0 AU:Dept1 1000 1
1 AU:Dept1, AU:Dept3 1000 2
4 CZ:Dept4, CZ:Dept6, CZ:Dept7 1001 2
5 CZ:Dept4 1001 1
6 PL:Dept1 1002 2
7 PL:Dept2, PL:Dept1 1002 1
9 SG:Dept1 1003 1
10 SG:Dept1 1003 2
执行此筛选的最佳方法是什么?让我们尝试拆分部门名称,然后在
['Employee',Name']
上进行groupby
,以找出哪些员工有两个角色nunique
:
(df.assign(Name=df['Department Name'].str.split(', '))
.explode('Name')
.loc[lambda x:x.groupby(['Employee Number','Name'])
['Role Code'].transform('nunique') ==2 ]
.drop('Name', axis=1)
)
输出:
Department Name Employee Number Role Code
0 AU:Dept1 1000 1
1 AU:Dept1, AU:Dept3 1000 2
4 CZ:Dept4, CZ:Dept6, CZ:Dept7 1001 2
5 CZ:Dept4 1001 1
6 PL:Dept1 1002 2
7 PL:Dept2, PL:Dept1 1002 1
9 SG:Dept1 1003 1
10 SG:Dept1 1003 2
你可以这样做
df['both_role'] = df.groupby('Employee Number')['Role Code'].isin([1]).astype(int) * df.groupby('Employee Number')['Role Code'].isin([2]).astype(int)
df[df.both_role == 1]
您可以使用员工编号进行分组,并检查每个用户的角色代码是否包含1和2。如果同时包含1和2,则可以筛选数据帧。您尝试过吗?邮政编码。我们可以帮助您解决代码中的具体问题。对不起,我正在度假,已经接受了答案,谢谢!