使用子字符串筛选listlike格式的dataframe列

2024-07-05 10:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下人员编号数据框(唯一且不重复)以及这些人员以类似列表的格式压缩的角色(针对具有多个角色的人员),如下所示:

         Person Number                                          Role Name
0          10000170             [HR Business Partner, HR Administrator, HR Administrator Limited]
1          10000479             [HR Administrator, HR Administrator Reporting]
2          10001347             [HR Business Partner, HR Administrator]
3          10003004             [HR Business Partner Approver, HR Business Partner]
4          10003048             [HR Administrator, HR Administrator Reporting]
5          10062441             [HR Business Partner Security Limited, HR Administrator Limited]
6          10062862             [HR Business Partner, HR Business Partner Approver]
7          10063101             HR Business Partner
8          10063833             HR Administrator

我希望按以下方式筛选此数据帧:

1-返回“角色名称”列采用类似列表格式的所有行:

输出:

         Person Number                                          Role Name
0          10000170             [HR Business Partner, HR Administrator, HR Administrator Limited]
1          10000479             [HR Administrator, HR Administrator Reporting]
2          10001347             [HR Business Partner, HR Administrator]
3          10003004             [HR Business Partner Approver, HR Business Partner]
4          10003048             [HR Administrator, HR Administrator Reporting]
5          10062441             [HR Business Partner Security Limited, HR Administrator Limited]
6          10062862             [HR Business Partner, HR Business Partner Approver]

2-以返回所有员工行的方式筛选此数据框,其中“角色名称”值中可能包含单词“业务合作伙伴”和单词“管理员”,返回以下内容:

输出:

         Person Number                                          Role Name
0          10000170             [HR Business Partner, HR Administrator, HR Administrator Limited]
2          10001347             [HR Business Partner, HR Administrator]
5          10062441             [HR Business Partner Security Limited, HR Administrator Limited]

我如何实现每个输出


Tags: 数据name角色numberpartner人员hrbusiness
1条回答
网友
1楼 · 发布于 2024-07-05 10:28:46

一种可能的想法是使用自定义函数从列Role Name生成一个布尔掩码,方法是使用^{},最后使用此掩码过滤数据帧中的行:

def fx(v):
    if not isinstance(v, list):
        return False

    roles = ','.join(v).lower()
    return 'business partner' in roles and 'administrator' in roles

df1 = df[df['Role Name'].apply(fx)]

结果:

# print(df1)
  Person Number                                          Role Name
0      10000170  [HR Business Partner,  HR Administrator,  HR A...
2      10001347           [HR Business Partner,  HR Administrator]
5      10062441  [HR Business Partner Security Limited,  HR Adm...

相关问题 更多 >