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

标签 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 中使用这个循环给我所有匹配项,我希望它找到最接近的匹配项并退出循环。所以数字媒体将是 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 语句循环遍历所有匹配项?字典与二维数组有何不同。

感谢任何帮助。

最佳答案

您可以使用:

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

关于Python/Pandas Dict 找到最接近的匹配然后结束循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51248179/

相关文章:

c++ - 是否可以将 int(enum) 映射到类型

javascript - Leaflet.js 球形墨卡托 WMS map 上的 GeoJSON 形状扭曲

c# - 不可变字典、字典、C5

python - 在 pandas DataFrame 中查找列的值最大的行

python - 如何为模型中的特定字段创建自定义权限?

python - python中有二维字典吗?

python - Python请求中 `data`和 `files`的区别

python - 你如何访问 Flask 路由中的查询字符串?

python - 如何查找并返回具有唯一值的 pandas 数据框行?

python - Pandas 有条件创建系列/数据框列