我有两个数据框:
df1 = row1;row2;row3 df2 = row4;row5;row6;row2
我希望我的输出数据框仅包含df1中唯一的行,即:
df_out = row1;row3
如何最有效地获得此信息?
这段代码做了我想要的,但是使用了2个for循环:
a = pd.DataFrame({0:[1,2,3],1:[10,20,30]}) b = pd.DataFrame({0:[0,1,2,3],1:[0,1,20,3]}) match_ident = [] for i in range(0,len(a)): found=False for j in range(0,len(b)): if a[0][i]==b[0][j]: if a[1][i]==b[1][j]: found=True match_ident.append(not(found)) a = a[match_ident]
您可以使用merge参数indicator和外部联接query进行过滤,然后使用以下命令删除帮助器列drop:
merge
indicator
query
drop
DataFrames在所有列上都是联接的,因此on可以省略参数。
on
print (pd.merge(a,b, indicator=True, how='outer') .query('_merge=="left_only"') .drop('_merge', axis=1)) 0 1 0 1 10 2 3 30