Python 如何在两个数据帧之间找到具有相同ID的所有记录?
我有两个数据帧,其中包含来自两个不同平台(id、标题、评论等)的电影评论数据。如果在另一个数据帧中未审阅某一特定电影,则需要从该数据帧中删除该电影的所有行。下面是一个例子:Python 如何在两个数据帧之间找到具有相同ID的所有记录?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有两个数据帧,其中包含来自两个不同平台(id、标题、评论等)的电影评论数据。如果在另一个数据帧中未审阅某一特定电影,则需要从该数据帧中删除该电影的所有行。下面是一个例子: import pandas as pd data1 = [[1, 'Great movie!', 'Spiderman'], [1, 'Not my preference', 'Spiderman'], [2, 'Just average...', 'Captain America'], [4, 'Tolerable',
import pandas as pd
data1 = [[1, 'Great movie!', 'Spiderman'], [1, 'Not my preference', 'Spiderman'], [2, 'Just average...', 'Captain America'], [4, 'Tolerable', 'Avengers']]
data2 = [[1, 'Did not think much of this', 'Spiderman'], [2, 'Great in my opinion!', 'Captain America'], [3, 'Could not finish', 'Batman Returns']]
df1 = pd.DataFrame(data1, columns = ['id', 'review', 'movie title'])
df2 = pd.DataFrame(data2, columns = ['id', 'review', 'movie title'])
df1.insert(3, "isValid", pd.Series(df1.id.isin(df2.id).values.astype(bool)))
df1 = df1[df1.isValid != False]
我想知道有没有更有效的方法
提前感谢您的帮助 您正在寻找
merge
函数。这将删除df1
和df2
中未看到的所有内容
df1.merge(df2,on=["id","movie title"])
Out:
id review_x movie title review_y
0 1 Great movie! Spiderman Did not think much of this
1 1 Not my preference Spiderman Did not think much of this
2 2 Just average... Captain America Great in my opinion!
您的
df1
idid,review\u x,movie title
和df2
是id,movie title review\u y
如果您想在df1中获得的“有效”信息,可以执行以下操作:
df1["isValid"] = df1.id.isin(df2.id)
new_df = df1.loc[df1.isValid == True]
id review movie title isValid
0 1 Great movie! Spiderman True
1 1 Not my preference Spiderman True
2 2 Just average... Captain America True
但是,如果您不关心“是否有效”
,只在选择答案时使用它,您可以简单地执行以下操作:
new_df = df1.loc[df1.id.isin(df2.id)]
id review movie title
0 1 Great movie! Spiderman
1 1 Not my preference Spiderman
2 2 Just average... Captain America
这个问题太宽泛了。看一看如何创建一个能让人们重现你的问题的模型好的,可以。谢谢@rafaelc我已经添加了一个例子并找到了一个合理的解决方案,但我想知道是否有更好的方法来做到这一点,因为我两边都有几百万条记录?谢谢。我必须将数据帧分开,所以使用合并并不能解决问题。谢谢你的澄清,这就是我想要的答案。:)