假设我有两个表: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的记录,然后删除该哑字段-这似乎有些麻烦。
people_usa['dummy']=1
谢谢!
使用isin和否定布尔掩码:
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
使用~反转蒙版
~