如何从另一个数据帧中移除pandas数据帧,就像集合减法一样:
a=[1,2,3,4,5]
b=[1,5]
a-b=[2,3,4]
现在我们有两个pandas数据框,如何从df1中删除df2:
In [5]: df1=pd.DataFrame([[1,2],[3,4],[5,6]],columns=['a','b'])
In [6]: df1
Out[6]:
a b
0 1 2
1 3 4
2 5 6
In [9]: df2=pd.DataFrame([[1,2],[5,6]],columns=['a','b'])
In [10]: df2
Out[10]:
a b
0 1 2
1 5 6
那么我们期望df1-df2的结果是:
In [14]: df
Out[14]:
a b
0 3 4
怎么做?
谢谢你。
您可以使用
.duplicated
,这样做的好处是具有相当的表现力:供比较:
总之,使用
np.array
比较是最快的。不需要那里的.tolist()
。解决方案
使用
pd.concat
后跟drop_duplicates(keep=False)
看起来像
解释
pd.concat
将两个DataFrame
相加,一个接一个。如果有任何重叠,它将被drop_duplicates
方法捕获。但是,drop_duplicates
默认情况下会留下第一个观察值,并删除所有其他观察值。在这种情况下,我们希望删除所有副本。因此,这个keep=False
参数就是这样做的。对重复的
df2
的特别注意。如果只有一个df2
,则df2
中任何不在df1
中的行都不会被视为重复行,并将保留。只有一个df2
的解决方案仅在df2
是df1
的子集时有效。但是,如果我们两次concatdf2
,则它保证是重复的,并且随后将被删除。一种集合逻辑方法。将
df1
和df2
的行转换为集合。然后使用set
减法定义新的DataFrame
相关问题 更多 >
编程相关推荐