根据唯一条件过滤行

时间:2020-09-17 16:21:39

标签: python pandas dataframe filter conditional-statements

我有以下代表员工编号,他们所在的部门及其代码的数据框。

   Department Name     Employee Number      Role Code   
0  Dept1               1000                     1
1  Dept1               1000                     2
2  Dept2               1000                     2
4  Dept3               1000                     2
5  Dept4               1000                     1
0  Dept1               1001                     1
1  Dept2               1001                     1
2  Dept2               1001                     2
4  Dept3               1001                     1
5  Dept3               1001                     2

我需要以每个员工在每个唯一部门只能拥有代码1或代码2的方式来过滤此数据框。如果他们在同一部门中都有两个角色,则返回两行,因此输出:

   Department Name     Employee Number      Role Code   
0  Dept1               1000                     1
1  Dept1               1000                     2
1  Dept2               1001                     1
2  Dept2               1001                     2
4  Dept3               1001                     1
5  Dept3               1001                     2

做到这一点的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

尝试一下:

df.groupby(['Department Name','Employee Number']).filter(lambda x: x['Role Code'].nunique() == 2)
  Department Name  Employee Number  Role Code
0           Dept1             1000          1
1           Dept1             1000          2
6           Dept2             1001          1
7           Dept2             1001          2
8           Dept3             1001          1
9           Dept3             1001          2

答案 1 :(得分:0)

让我们尝试name

groupby().nunique()

输出:

mask = df.groupby(['Department Name','Employee Number'])['Role Code'].transform('nunique')

df[mask==2]