繁体   English   中英

Pandas在两个数据帧之间执行SQL减法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM