不同数据帧的两列之间的部分字匹配

2024-09-28 05:29:04 发布

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

我有两个数据帧,如:

df1:

enter image description here

df2:

enter image description here

我正在尝试将任何术语与文本匹配

MyCode:

import sys,os
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import csv
import re

# data
data1 = {'termID': [1,55,341,41,5685], 'term':['Cardic Arrest','Headache','Chest Pain','Muscle Pain', 'Knee Pain']}
data2 = {'textID': [25,12,52,35], 'text':['Hello Mike, Good Morning!!',
                                         'Oops!! My Knee pains!!',
                                          'Stop Music!! my head pains',
                                          'Arrest Innocent!!'
                                         ]}

#Dataframes 
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# Matching logic
matchList=[]
for index_b, row_b in df2.iterrows():
    for index_a, row_a in df1.iterrows():
        if  row_a.term.lower() in row_b.text.lower() :   
            #print(row_b.text, row_a.term)
            matchList.append([row_b.textID,row_b.text ,row_a.term, row_a.termID] )

cols = ['textID', 'text,','term ','termID' ]
d = pd.DataFrame(matchList, columns = cols)
print(d)

这只给了我一行作为输出:

enter image description here


我有两个问题需要解决:

  1. 不确定如何获得以下任何部分匹配的输出:

enter image description here

  1. DF1和DF2的记录大小分别约为0.4M和13M

解决这两个问题的最佳方法是什么


Tags: textinimportdataframedatetimeasrowpd
1条回答
网友
1楼 · 发布于 2024-09-28 05:29:04

我有问题1的快速解决方案,但没有优化。 你只得到一场比赛,因为“膝盖疼痛”是df1中唯一完整出现的术语。 我已经修改了if语句,从df2中分割文本,并检查列表中是否有匹配项。 同意@jakub的观点,有一些库可以更快地完成这项工作

# Matching logic
matchList=[]
for index_b, row_b in df2.iterrows():
    print(row_b)
    for index_a, row_a in df1.iterrows():
        if  any(word in row_a.term.lower() for word in row_b.text.lower().split()):
            #print(row_b.text, row_a.term)
            matchList.append([row_b.textID,row_b.text ,row_a.term, row_a.termID] )

cols = ['textID', 'text,','term ','termID' ]
d = pd.DataFrame(matchList, columns = cols)
print(d)

输出

   textID                       text,          term   termID
0      12      Oops!! My Knee pains!!      Knee Pain    5685
1      52  Stop Music!! my head pains       Headache      55
2      35           Arrest Innocent!!  Cardic Arrest       1

相关问题 更多 >

    热门问题