如何使用模糊逻辑从熊猫的数据框中匹配和提取文本?

时间:2018-07-05 09:35:21

标签: python pandas

我有两个数据框,如下所示: DF1:

$('#' + myID).contents().appendTo('#popupWrapper');

DF 2:

Name                     Value
buying fish hook         240
arrange lunch            75
repair equipment         800
purchase air condition   1400
buying fish              66

我想用模糊逻辑将两个数据框的名称列中的名称匹配,并将第二个数据框的名称列添加至第一个:

Name
fish
lunch
equipemt
air condition
hair condition
fish hook

并非所有名称都完全匹配。 Df 2有几个名称,有些具有匹配的词,例如:air condition和hair condition。从DF 1拆分值会导致未命中,其中鱼钩仅与鱼匹配

2 个答案:

答案 0 :(得分:0)

您可以将pd.Series.applynext和生成器表达式一起使用。如果有多个匹配项,则此方法将按df2中的行顺序赋予优先级。如果找不到匹配项,find_key将返回None

def find_key(x):
    return next((i for i in df2['Name'].values if x in i), None)

df1['item'] = df1['Name'].apply(find_key)

答案 1 :(得分:0)

from fuzzywuzzy import process
i = 0
scorethreshold = 70
df1["fuzzy"] = 0
for x in df1.Name:
    noun,score,record = process.extractOne(x,df2.Name)
    if score > scorethreshold:     
        df1.loc[i,'fuzzy'] = noun
    else:
        df1.loc[i,'fuzzy'] = None
    i = i + 1

此代码将比较并匹配文本。根据得分阈值返回df2值或无。您可以根据df2的精度修改阈值。您可能还需要进行一些文本处理以获得更好的结果。