如何合并两个字符串列,其中一个是另一个的子集

时间:2019-05-01 23:25:17

标签: python string pandas search merge

我有DF1和一个DF2,我想在左侧(在['text']列上)合并

DF2['text']的某些字符串是DF1['text']的子字符串。

我尝试使用双循环进行脏循环,但是DF1大约有20万行,DF2大约有2k行,因此时间似乎很长(最好的情况)

DF1
id   text                           
1    'some text with details'       
2    'which are not always good'    
3    'irrelevant text'   
4    'I want to get rid of them'
5    'more irrelevant cells'

DF2
id   text                           tag
1    'with details'                 'Good'
2    'which are not'                'Bad'
3    'to get rid of'                'semiGood'
for i in range(len(DF2)):
    for k in range(len(DF1)):
        if DF2['text'][i] in DF2['text'][k]:
            DF1.loc[:,'tag'].iloc[k] = DF2['tag'][i]

预期输出:

DF1
id   text                           tag
1    'some text with details'       'Good'
2    'which are not always good'    'Bad'
3    'irrelevant text'              
4    'I want to get rid of them'    'semiGood'
5    'more irrelevant cells'

我很想找到一种方法,可以在不到5天的时间内完成双循环。有东西吗?

1 个答案:

答案 0 :(得分:0)

我认为我的方法有点复杂。如果可以找到,您可以尝试其他技术。这是我的方法:

首先,我将textDF1的{​​{1}}列中的每个单词分开:

DF2

然后,我将splitDF1, splitDF2 = [],[] for i,tt1 in enumerate(DF1['text']): splitDF1.append([i,tt1.split()]) for i,tt2 in enumerate(DF2['text']): splitDF2.append([i,tt2.split()]) 中的拆分文本列表与DF1中的拆分文本列表进行比较。如果DF2中的拆分文本是DF2中拆分文本的子集,请将DF2存储到新列表中,否则将其保留为空。最后,使用新列表将新列tag添加到tag中。

DF1

输出:

DF1tag = []
for sdf1 in splitDF1:
    for sdf2 in splitDF2:
        if set(sdf2[1]).issubset(sdf1[1]):
            tag = DF2.iloc[sdf2[0]][2]
            break
        else:
            tag = ""
    DF1tag.append(tag)
DF1['tag'] = DF1tag