【问题标题】:Filter rows based on unique condition根据唯一条件过滤行
【发布时间】:2021-01-04 14:18:54
【问题描述】:

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

   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

最好的方法是什么?

【问题讨论】:

    标签: python pandas dataframe filter conditional-statements


    【解决方案1】:

    我们试试groupby().nunique():

    mask = df.groupby(['Department Name','Employee Number'])['Role Code'].transform('nunique')
    
    df[mask==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】:

      试试这个:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多