Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从一个数据帧中删除不在另一个数据帧中的字_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何从一个数据帧中删除不在另一个数据帧中的字

Python 如何从一个数据帧中删除不在另一个数据帧中的字,python,pandas,dataframe,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

我想删除
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

编辑:如果我还可以打印我删除的单词,以及它们的计数(我删除的单词总数)

一种方法是使用
集合
,并从两个给定的列表中选择具有相应索引的字符串。然后,我们可以使用
排序
根据
df1对结果进行排序。text
和列表中的项目重新组合在一起:

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'])


要获得更具可读性的解决方案,请执行以下操作:

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'])

拆分测试并获得交叉点?欢迎使用SO。请花点时间阅读该页面上的其他链接。嘿,我确实打印了(pd.DataFrame(res,columns=['Text'])它是空的。它只是显示了0-1000之间的索引(我有1000行),我不确定会有什么错误。。。它对我有用。。。尝试一下常规循环,看看你是否明白为什么它不工作?我的错,我的代码中犯了一些错误。谢谢,从df1和df2的行中删除了很多?嘿。对不起,以前没有注意到。但是,
out
的输出不是预期的。让我再解释一遍
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'])