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

尝试将此逻辑应用于以下DF


我有一个df如下


import pandas as pd

import numpy as pd


df = pd.read_csv('subjects.csv') 


Subjects

Media

information Media

Digital Media

然后,我尝试将我的主题映射到字典,以输出经过验证的corrected_subject


d = {'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_corrected

Media              Film & Media

information Media  Film & Media, ICT

Digital Media      Film & Media, ICT

现在,通过我的DF使用此循环,在我希望它找到最接近的匹配并退出循环的地方给了我所有匹配项。因此,数字媒体将是ICT,而不是媒体


我已经尝试了以下方法,但是对我来说并不是一个好兆头!为了


for k,v in d.items():

    if k in df['subjects']:

        df['subject_corrected'] = d.values():


Subjects           subject_corrected

Media              Film & Media

information Media  ICT

Digital Media      ICT

我看过很多类似的文章,但无法解决。


我会以错误的方式解决这个问题,是否应该将其传递到两个列表/数组中并使用if语句遍历所有匹配项?dict与2D阵列有何不同?


猛跑小猪
浏览 184回答 1
1回答

郎朗坤

您可以使用:df['Subjects'].apply(lambda x: ', '.join([d[i] for i in d if i in x])).str.split(', ').str[-1]输出:            Subjects      subject_corrected0              Media      Film & Media1  Information Media               ICT2      Digital Media               ICT您也可以通过下面的代码行直接获得输出,只需从列表中获取最后一个元素。df['Subjects'].apply(lambda x: [d[i] for i in d if i in x][-1])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python