为了账号安全,请及时绑定邮箱和手机立即绑定

Python / Pandas Dict查找最接近的匹配项,然后结束循环

Python / Pandas Dict查找最接近的匹配项,然后结束循环

猛跑小猪 2021-04-01 14:08:03
尝试将此逻辑应用于以下DF我有一个df如下import pandas as pdimport numpy as pddf = pd.read_csv('subjects.csv') SubjectsMediainformation MediaDigital Media然后,我尝试将我的主题映射到字典,以输出经过验证的corrected_subjectd = {'Media' : 'Film & Media','Information' : 'ICT','Digital' : 'ICT'}df['subject_corrected'] = df['subjects'](lambda x: ', '.join([d[i] for i in d if i in x]))Subjects           subject_correctedMedia              Film & Mediainformation Media  Film & Media, ICTDigital Media      Film & Media, ICT现在,通过我的DF使用此循环,在我希望它找到最接近的匹配并退出循环的地方给了我所有匹配项。因此,数字媒体将是ICT,而不是媒体我已经尝试了以下方法,但是对我来说并不是一个好兆头!为了for k,v in d.items():    if k in df['subjects']:        df['subject_corrected'] = d.values():Subjects           subject_correctedMedia              Film & Mediainformation Media  ICTDigital Media      ICT我看过很多类似的文章,但无法解决。我会以错误的方式解决这个问题,是否应该将其传递到两个列表/数组中并使用if语句遍历所有匹配项?dict与2D阵列有何不同?
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

您可以使用:


df['Subjects'].apply(lambda x: ', '.join([d[i] for i in d if i in x])).str.split(', ').str[-1]

输出:


            Subjects      subject_corrected

0              Media      Film & Media

1  Information Media               ICT

2      Digital Media               ICT

您也可以通过下面的代码行直接获得输出,只需从列表中获取最后一个元素。


df['Subjects'].apply(lambda x: [d[i] for i in d if i in x][-1])


查看完整回答
反对 回复 2021-04-27
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信