小编典典

python pandas:如何在一个数据框中找到行,而在另一个数据框中却找不到?

python

假设我有两个表:people_all和people_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的记录,然后删除该哑字段-这似乎有些麻烦。

谢谢!


阅读 194

收藏
2021-01-20

共1个答案

小编典典

使用isin和否定布尔掩码:

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,布尔掩码如下所示:

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

使用~反转蒙版

2021-01-20