假设我有两个表: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,然后删除虚拟字段 - 这看起来有点令人费解。
谢谢!
最佳答案
使用 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/