python - 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%
我怎么能做这个?谢谢您的帮助!
解决方案
您可以使用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%
推荐阅读
- unreal-engine4 - 来自不同来源的虚幻引擎资源没有显示在正确的位置(彼此顶部)
- .net - EngineIoClientDotNet 在 xamarin.forms 中不起作用
- php - 我想在过滤器上设置仅加载登录用户数据或将加载公共数据的条件。但私人数据也会被加载
- python - 使用 dict 替换 pandas 列中的值
- postgresql - 如何使用 postgresql 为以下输入格式在存储过程中插入/更新多列
- php - 处理字符串字段中的意外数组/对象 - ElasticSearch
- python - 如何在 pip 中恢复以前的包版本?
- sql - Redshift SQL - 将行按 id 转换为列
- javascript - 如何使用 JavaScript 操作输入框中的值?
- c# - 如何通过 MS Graph API C# 为 ADB2C 用户重置 MFA