如何从一个数据框中删除不在另一个数据框中的单词

时间:2019-05-06 13:51:52

标签: python pandas dataframe

我想从df2中删除所有不在df1中的单词。

我的df1看起来像这样:

id    text                                 
1     Hello world how are you people    
2     Hello people I am fine  people   
3     Good Morning people              
4     Good Evening                     

我的df2如下:

id    text                                 
1     Hello world how are you all
2     Hello everyone I am fine everyone
3     Good Afternoon people              
4     Good Night

df2的预期输出:

id    text                                 
1     Hello world how are you
2     Hello I am fine
3     Good people              
4     Good

编辑:如果我还可以打印删除的单词及其计数(删除的单词总数),那会很好

1 个答案:

答案 0 :(得分:1)

一种方法是使用sets,并使用两个给定列表中的intersection,其对应索引包含split个字符串。然后,我们可以使用sorted根据df1.textjoin对列表中的项目进行排序:

res = [' '.join(sorted(set(s1.split()) & set(s2.split()), key=s1.split().index)) 
                                        for s1, s2 in zip(df1.text, df2.text)]
out = pd.DataFrame(res, columns=['Text'])

print(out)
             Text
0  Hello world how are you
1          Hello I am fine
2              Good people
3                     Good

有关更具可读性的解决方案:

res = []
for s1, s2 in zip(df1.text, df2.text):
    set_s2 = s2.split()
    set_int = set(set_s2) & set(s1.split())
    s_int = sorted(set_int, key=set_s2.index)
    res.append(' '.join(s_int))

out = pd.DataFrame(res, columns=['Text'])