[英]Pandas performing a SQL subtraction between two dataframes
我有两个数据帧。 首先是DF1:
ID Other value
1 a
2 b
3 c
然后是DF2,它是DF1的子集:
ID Other value
1 a
我想创建第三个数据框,它等效于SQL中的负号:将所有观测值放在两个数据框的交集中。 这将留给我DF3:
ID Other value
2 b
3 c
我一直在尝试使用pandasql,但它似乎不喜欢我的sql。 代码如下:从pandasql import * import pandas as pd
pysqldf = lambda q: sqldf(q, globals())
train = pysqldf(""" SELECT * FROM DF1 WHERE ID
NOT IN (SELECT ID FROM DF2) """)
我收到了错误
Error on sql SELECT * FROM DF1 WHERE ID
NOT IN (SELECT ID FROM DF2)
关于出了什么问题或者如何使用其他一些pandas功能快速实现这一点的任何想法。 我可以在R中做同样的事情而没有任何问题。
这应该做到这一点
df1[df1.ID.isin(df2.ID) == False]
您可以减去索引(设置减去):
In [11]: df1
Out[11]:
Other value
ID
1 a
2 b
3 c
In [12]: df2
Out[12]:
Other value
ID
1 a
In [13]: df1.index - df2.index
Out[13]: Int64Index([2, 3], dtype=int64)
In [14]: df1.loc[df1.index - df2.index] # assuming IDs are unique
Out[14]:
Other value
ID
2 b
3 c
0.13中可用的另一个选项是使用isin方法:
In [21]: df1.isin(df2)
Out[21]:
Other value
ID
1 True
2 False
3 False
In [22]: df1[~df1.isin(df2).all(1)]
Out[22]:
Other value
ID
2 b
3 c
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.