Python-pandas获取不在其他数据框中的行

我有两个pandas数据框,它们有一些共同点。

假设dataframe2dataframe1的子集。

如何获取dataframe1中不在dataframe2中的行?

df1 = pandas.DataFrame(data = {'col1' : [1, 2, 3, 4, 5], 'col2' : [10, 11, 12, 13, 14]}) 

df2 = pandas.DataFrame(data = {'col1' : [1, 2, 3], 'col2' : [10, 11, 12]})

回答:

一种方法是存储两个df的内部合并结果,然后我们可以简单地在一行的值不在此通用值中时选择行:

In [119]:

common = df1.merge(df2,on=['col1','col2'])

print(common)

df1[(~df1.col1.isin(common.col1))&(~df1.col2.isin(common.col2))]

col1 col2

0 1 10

1 2 11

2 3 12

Out[119]:

col1 col2

3 4 13

4 5 14

编辑

你发现的另一种方法是使用isin它将产生NaN可删除的行:

In [138]:

df1[~df1.isin(df2)].dropna()

Out[138]:

col1 col2

3 4 13

4 5 14

但是,如果df2不能以相同的方式开始行,那么它将行不通:

df2 = pd.DataFrame(data = {'col1' : [2, 3,4], 'col2' : [11, 12,13]})

将产生整个df:

In [140]:

df1[~df1.isin(df2)].dropna()

Out[140]:

col1 col2

0 1 10

1 2 11

2 3 12

3 4 13

4 5 14

以上是 Python-pandas获取不在其他数据框中的行 的全部内容, 来源链接: utcz.com/qa/426763.html

回到顶部