我有一个手动输入职位的DataFrame列。有数百个,但我想将它们减少到以下的桶
CXO or Senior Vice President
Vice President
Director
Manager
etc...
有些职称拥有多个实际职称,如"首席执行官和营销总监等#34;或者"副总裁兼软件工程师"所以我想用排名最高的桶代替。这是我到目前为止所做的事情(这是行不通的。)
skip_jobs=[]
df['jobtitle'].replace(to_replace='.*[Cc].[Oo].*|.*[Vv]ice.*', value='CXO or Senior Vice President,
regex=True, inplace=True)
skip_jobs.append('CXO or Senior Vice President')
df['jobtitle'][~df['jobtitle'].isin(skip_jobs)].replace(to_replace='.*VP*|.*[Vv]ice.*',
value='Vice President', regex=True, inplace=True)
...
一个问题是regex = True意味着to_replace和value都被视为正则表达式,因此我匹配的任何模式都被替换为被视为正则表达式的值。我希望用一个新的字符串代替整个字符串 - 例如:"首席执行官兼营销总监"被" CXO或高级副总裁替换为#34;。如果有人有一些想法让我知道,谢谢你。
编辑:如何将剩余的作业标记为'其他'?以下是我目前正在使用的内容,但它会覆盖以前的部分作业。
skip_jobs = ['CXO or Sen. Vice Pres', 'Vice President'...]
df['jobtitle'][~df['jobtitle'].isin(skip_jobs)] = 'Other'
答案 0 :(得分:0)
replace
下的str
方法更易于使用。你必须修改我的代码中的正则表达式以适合你的数据,但只记得匹配整个字符串。
>>> df['title'] 0 CXO or Senior Vice President 1 Vice President 2 CEO 3 Manager >>> df['title'] = df['title'].str.replace('^.*(C[A-Z]O|VP|[Vv]ice).*$', 'CXO or Senior Vice President') >>> df['title'] 0 CXO or Senior Vice President 1 CXO or Senior Vice President 2 CXO or Senior Vice President 3 Manager