草庐IT

python Pandas : how to find rows in one dataframe but not in another?

coder 2023-08-20 原文

假设我有两个表:people_allpeople_usa,它们具有相同的结构,因此具有相同的主键。

我怎样才能得到不在美国的人的表格? 在 SQL 中,我会做类似的事情:

select a.*
from people_all a

left outer join people_usa u
on a.id = u.id

where u.id is null

Python 的等价物是什么?我想不出将这个 where 语句翻译成 pandas 语法的方法。

我能想到的唯一方法是在 people_usa 中添加一个任意字段(例如 people_usa['dummy']=1),进行左连接,然后只取“dummy”所在的记录' 是 nan,然后删除虚拟字段 - 这看起来有点令人费解。

谢谢!

最佳答案

使用 isin 并取反 bool 掩码:

people_usa[~people_usa['ID'].isin(people_all ['ID'])]

例子:

In [364]:
people_all = pd.DataFrame({ 'ID' : np.arange(5)})
people_usa = pd.DataFrame({ 'ID' : [3,4,6,7,100]})
people_usa[~people_usa['ID'].isin(people_all['ID'])]

Out[364]:
    ID
2    6
3    7
4  100

因此从结果中删除了 3 和 4, bool 掩码如下所示:

In [366]:
people_usa['ID'].isin(people_all['ID'])

Out[366]:
0     True
1     True
2    False
3    False
4    False
Name: ID, dtype: bool

使用 ~ 反转掩码

关于 python Pandas : how to find rows in one dataframe but not in another?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32651860/

有关python Pandas : how to find rows in one dataframe but not in another?的更多相关文章

随机推荐