Python 将一列中的文本映射到另一列中的文本
我有一个csv,其中有一列包含各种形式的标题。我需要将所有首席执行官、首席运营官、首席运营官、首席运营官等映射到“C级”;副总裁、高级副总裁、副总裁至另一专栏中的“高级副总裁” 我曾尝试用数字映射标题,但未能做到这一点,而且我认为可能有更简单的方法。我还希望在一列中完成所有操作,而不是在映射它们时为C-Level和VP-SVP设置两列 附件是预期结果 我如何解决这个问题Python 将一列中的文本映射到另一列中的文本,python,regex,pandas,Python,Regex,Pandas,我有一个csv,其中有一列包含各种形式的标题。我需要将所有首席执行官、首席运营官、首席运营官、首席运营官等映射到“C级”;副总裁、高级副总裁、副总裁至另一专栏中的“高级副总裁” 我曾尝试用数字映射标题,但未能做到这一点,而且我认为可能有更简单的方法。我还希望在一列中完成所有操作,而不是在映射它们时为C-Level和VP-SVP设置两列 附件是预期结果 我如何解决这个问题 定义一个字典,以便键是您请求的结果,值是一个可能性列表。 my_dict = {"C-LEVEL":['CHIEF',"THE
定义一个字典,以便键是您请求的结果,值是一个可能性列表。
my_dict = {"C-LEVEL":['CHIEF',"THE CHIEF","MY CHIEF"],"VP-SVP":['VP','PRODUCT VP']}
要使用虚拟数据,请执行以下操作:
df=pd.DataFrame({"A":["CHIEF","MY CHIEF","VP","PRODUCT VP","THE CHIEF", "USER"]})
A
0 CHIEF
1 MY CHIEF
2 VP
3 PRODUCT VP
4 THE CHIEF
5 USER
创建搜索密钥的函数:
def yourfunc(value):
for k,v in my_dict.items():
if value in my_dict.get(k):
return k
return "N/A"
最后,使用lambda应用函数:
df['Result'] = df['A'].apply(lambda x: yourfunc(x))
预期结果:
A Result
0 CHIEF C-LEVEL
1 MY CHIEF C-LEVEL
2 VP VP-SVP
3 PRODUCT VP VP-SVP
4 THE CHIEF C-LEVEL
5 USER N/A
当您看到“N/A”结果时,您将知道您需要升级词典 您添加了预期的输出,但不是原始数据的样子。我的原始数据是一列标题,正如我在描述中提到的。因此,上图中第一列的6000行是我拥有的数据。嗨,谢谢!它部分起作用。它似乎区分大小写,而且似乎只接受确切的标题。例如,我有一个标题“公司关系副总裁”,但除非完全指定,否则它不会只读取其中的副总裁部分并将其映射到副总裁。你知道怎么做吗?关于区分大小写的问题,你可以添加:df.column1.str.lower()。由于公司关系副总裁不在['ceo'、'首席运营官'、'首席运营官'、'首席运营官'、'首席运营官']中,标签应该是vp svp,正如预期的那样。我认为,但搜索标题的一部分似乎更为复杂。您需要找到将输入映射到输出的一般规则,然后定义一个函数f,如果f(输入),该函数将返回true='c-level'为假,否则为假。然后是np.where(df.column1.apply(f)),'c-level','vp-svp')
A Result
0 CHIEF C-LEVEL
1 MY CHIEF C-LEVEL
2 VP VP-SVP
3 PRODUCT VP VP-SVP
4 THE CHIEF C-LEVEL
5 USER N/A