比较两个pandas数据帧,并获得所有数据行值都不在正确数据帧中的左侧数据帧行

时间:2020-01-22 10:57:13

标签: python pandas compare

我有两个数据框:

df1 = pd.DataFrame(data={'a': [random.randint(0, 100) for x in range(1000000)], 'b': [random.randint(0, 100) for x in range(1000000)]})
df2 = pd.DataFrame(data={'a': [random.randint(0, 10) for x in range(2000000)], 'b': [random.randint(0, 10) for x in range(2000000)]})

我想从df1中获取所有行值都不在df2中的所有行。

当前,我这样做:

s1 = df1.drop_duplicates().agg(tuple, axis=1)
s2 = df2.drop_duplicates().agg(tuple, axis=1)
ix = s1[~s1.isin(s2)].index
df1 = df1[df1.index.isin(ix)]

有没有办法使其更快?

编辑:

我已经创建了这样的解决方案,该解决方案是我可以提供的最快的解决方案,但是我失去了订单(索引):

s1 = set([tuple(x) for x in df1.values.tolist()])
s2 = set([tuple(x) for x in df2.values.tolist()])
res = s1 - s2
df1 = pd.DataFrame(data=res, columns=['a', 'b'])

EDIT2:

这似乎是最快,最好的解决方案:

df1 = df1.merge(df2,indicator = True, how='left').loc[lambda x : x['_merge'] =='left_only']

0 个答案:

没有答案
相关问题