查找两个数据帧之间匹配的字符串

2024-05-19 02:13:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧如下。在

DF1:

   A
Any Match
Credit
I need a debit card.
Logging
Awesome

我有另一个数据帧如下:

DF2:

^{pr2}$

我需要我的输出为:

^{3}$

如果DF1中出现的短语出现在DF2中的任何文本中。 将o/p打印为文本和重要短语。在


Tags: 数据文本loggingmatchanyneedcardawesome
3条回答

试试这个

df1['B'] = float('nan')

pos = 0
for i in range(len(df1)):
    for j in range(len(df2)):
        if df1['A'][i].lower() in df2['B'][j].lower():
            df1['B'].iloc[pos] = df2['B'][j]
            pos+=1
            break

df1.dropna(axis=0)

输出

^{pr2}$

你可以这样做。首先,定义一个与“标准化”文本匹配的查找函数,例如小写:

def lookup(x, values):
    for value in values:
        if value.lower() in x.lower():
            return value

然后将此函数应用于DF2:

^{pr2}$

这会给你:

    B                           A
0   I did not find any match.   Any Match
1   I want a credit card.       Credit
2   I need a debit card.        Debit
3   I do not know.              None

尝试Fuzzywuzzy

import pandas as pd
from fuzzywuzzy import fuzz

matched_entities = []

for row in df1.index:
    name1 = vendor_df.get_value(row,"A")
    for columns in df2.index:
        name2=df2.get_value(columns,"B")
        matched_token=fuzz.partial_ratio(name1,name2)
        if matched_token> 80:
            matched_vendors.append([A,B])

df_partial_ratio = pd.DataFrame(columns=['A', 'B'], data=matched_entities)

如果fuzz.partial_ratio不起作用,请尝试fuzz.ratio或{}。这两种方法可以通过将上述一行代码改为以下代码来实现:

^{pr2}$

或者

matched_token=fuzz.token_sort_ratio(name1,name2)

相关问题 更多 >

    热门问题