Python / Pandas Dict查找最匹配的内容,然后结束循环

时间:2018-07-09 14:41:28

标签: python pandas dictionary

尝试将此逻辑应用于以下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,给我 all 个匹配项,让我在其中找到最接近的匹配项并退出循环。因此数字媒体将是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阵列有什么不同。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用:

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])