首页 > 解决方案 > pandas 使用 LIKE 运算符加入条件

问题描述

我有 2 个数据框: 用户

 user_id    position
0   201 Senior Engineer
1   207 Senior System Architect
2   223 Senior account manage
3   212 Junior Manager
4   112 junior Engineer
5   311 junior python developer
df1 = pd.DataFrame({'user_id': ['201', '207', '223', '212', '112', '311'],
                   'position': ['Senior Engineer', 'Senior System Architect', 'Senior account manage', 'Junior Manager', 'junior Engineer', 'junior python developer']})

角色

 role_id     role_position
0   10         %senior%
1   20         %junior%
df2 = pd.DataFrame({'role_id': ['10', '20'],
                   'role_position': ['%senior%', '%junior%']})

我想加入他们以使用以下条件获取 df1 中每一行的 role_id:

lower(df1.position) LIKE df2.role_position

我想使用运算符 LIKE(就像在 SQL 中一样)。所以它看起来像这样(或者没有 role_position - 它会更好):

user_id position                role_id  role_position
0   201 Senior Engineer           10      %senior%
1   207 Senior System Architect   10      %senior%
2   223 Senior account manage     10      %senior%
3   212 Junior Manager            20      %junior%
4   112 junior Engineer           20      %junior%
5   311 junior python developer   20      %junior%

我怎么能做这个?谢谢您的帮助!

标签: pythonpandasdataframejoinsql-like

解决方案


您可以使用str.extract()+ merge()

pat='('+'|'.join(df2['role_position'].str.strip('%').unique())+')'
df1['role_position']='%'+df1['position'].str.lower().str.extract(pat,expand=False)+'%'
df1=df1.merge(df2,on='role_position',how='left')

输出df1

user_id position                role_id  role_position
0   201 Senior Engineer           10      %senior%
1   207 Senior System Architect   10      %senior%
2   223 Senior account manage     10      %senior%
3   212 Junior Manager            20      %junior%
4   112 junior Engineer           20      %junior%
5   311 junior python developer   20      %junior%

推荐阅读